Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 650|回复: 0

Android 扫雷游戏(二) - Android学习

[复制链接]

该用户从未签到

发表于 2011-10-26 16:41:28 | 显示全部楼层 |阅读模式
       使用风格

  在我们的扫雷游戏里,点击新游戏的笑脸按钮会让这个笑脸变成紧张的表情。当按钮处于按压状态时(紧张的笑脸),我们需要一个不同的图像。当它处于正常状态时需要另一张图像。为了实现此功能,我们使用风格,效果如下:




       使用风格也需要两步:
  1.创建一个XML文件(风格定义文件),指定相应的按钮状态使用的图片.比如在按压状态下,我们需要惊讶(紧张)的图片,正常状态下需要微笑的图片.当然,这两幅图片已经复制到 res/drawable文件夹中了.风格文件的代码如下:


java代码:
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_focused="true"

android:state_pressed="false"

android:drawable="@drawable/smile" />

<item android:state_focused="true"

android:state_pressed="true"

android:drawable="@drawable/surprise" />

<item android:state_focused="false"

android:state_pressed="true"

android:drawable="@drawable/surprise" />

<item android:drawable="@drawable/smile" />

</selector>
复制代码
        1.为新游戏按钮更新/添加背景的属性值,将它的值设定为上面创建的风格文件。更新后的ImageButton代码如下:

java代码:
<ImageButton android:id="@+id/Smiley"

android:layout_column="1"

android:background="@drawable/smiley_button_states"

android:layout_height="48px"/>
复制代码
       TableLayout中的动态行

  动态添加砖块的原理相同(砖块是从按钮类继承的类,包含支持实现的额外功能).我们希望它们像预想的那样工作,分为如下的几步:
  1.创建一个TableRow对象,设置布局的参数值.
  2.将砖块添加到上面创建的行对象中.
  3.使用 findViewById 函数获得TableLayout(雷区)的样本.
  4.将上边创建的行添加到TableLayout中

java代码:
private TableLayout mineField; // table layout to add mines to



private Block blocks[][]; // blocks for mine field



public void onCreate(Bundle savedInstanceState)

{

...

mineField = (TableLayout)findViewById(R.id.MineField);

}



private void showMineField()

{

for (int row = 1; row < numberOfRowsInMineField + 1; row++)

{

TableRow tableRow = new TableRow(this);

tableRow.setLayoutParams(new LayoutParams((blockDimension + 2 * blockPadding) *

numberOfColumnsInMineField, blockDimension + 2 * blockPadding));



for (int column = 1; column < numberOfColumnsInMineField + 1; column++)

{

blocks[row][column].setLayoutParams(new LayoutParams(

blockDimension + 2 * blockPadding,

blockDimension + 2 * blockPadding));

blocks[row][column].setPadding(blockPadding, blockPadding, blockPadding, blockPadding);

tableRow.addView(blocks[row][column]);

}

mineField.addView(tableRow,new TableLayout.LayoutParams(

(blockDimension + 2 * blockPadding) * numberOfColumnsInMineField, blockDimension + 2 * blockPadding));

}

}
复制代码
       用Handler取代Timer
       可以用两种方法使用Handler,一种是给Handler传递消息并在消息收到时执行特定的操作,另一种是在Handler中调度一个Runable对象。我们在扫雷中使用第二种方法,使用Handler的好处在于它和creator线程中的thread/message队列相联系。了解更多关于Handler的信息,实现handler的代码如下:

java代码:
private Handler timer = new Handler();

private int secondsPassed = 0;



public void startTimer()

{

if (secondsPassed == 0)

{

timer.removeCallbacks(updateTimeElasped);

// tell timer to run call back after 1 second

timer.postDelayed(updateTimeElasped, 1000);

}

}



public void stopTimer()

{

// disable call backs

timer.removeCallbacks(updateTimeElasped);

}



// timer call back when timer is ticked

private Runnable updateTimeElasped = new Runnable()

{

public void run()

{

long currentMilliseconds = System.currentTimeMillis();

++secondsPassed;

txtTimer.setText(Integer.toString(secondsPassed));



// add notification

timer.postAtTime(this, currentMilliseconds);

// notify to call back after 1 seconds

// basically to remain in the timer loop

timer.postDelayed(updateTimeElasped, 1000);

}

};
复制代码
系列之Android 扫雷游戏(一)的帖子链接http://www.eoeandroid.com/thread-102103-1-1.html
系列之Android 扫雷游戏(三)的帖子链接http://www.eoeandroid.com/thread-102116-1-1.html
系列之Android 扫雷游戏(四)的帖子链接http://www.eoeandroid.com/thread-102272-1-1.html
系列之Android 扫雷游戏(五)的帖子链接http://www.eoeandroid.com/thread-102273-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 18:36 , Processed in 0.399879 second(s), 38 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表