用Android Studio做一个超好玩的拼图游戏( 四 )


//定义九个图片按钮,命名方法也是00,01这样的横纵坐标ImageButton ib00,ib01,ib02,ib10,ib11,ib12,ib20,ib21,ib22;//一个重启按钮Button restartBtn;//一个显示时间的文本框TextView timeTv;
然后我们在中定义一个()方法,这个方法是用来初始化控件的
//初始化layout控件的方法initView();
然后创建该方法,在该方法里面初始化定义的控件,通过()进行绑定控件,将声明的变量和中对应的控件进行绑定,实现引用的效果,代码如下:
/* 初始化控件:绑定9个图片按钮,1个显示时间的文本框,1个重启按钮*/private void initView() {ib00 = findViewById(R.id.pt_ib_00x00);ib01 = findViewById(R.id.pt_ib_00x01);ib02 = findViewById(R.id.pt_ib_00x02);ib10 = findViewById(R.id.pt_ib_01x00);ib11 = findViewById(R.id.pt_ib_01x01);ib12 = findViewById(R.id.pt_ib_01x02);ib20 = findViewById(R.id.pt_ib_02x00);ib21 = findViewById(R.id.pt_ib_02x01);ib22 = findViewById(R.id.pt_ib_02x02);timeTv = findViewById(R.id.pt_tv_time);restartBtn = findViewById(R.id.pt_btn_restart);}
初始化的完整代码,可以作为模板:
public class MainActivity extends AppCompatActivity {//定义九个图片按钮,命名方法也是00,01这样的横纵坐标ImageButton ib00,ib01,ib02,ib10,ib11,ib12,ib20,ib21,ib22;//一个重启按钮Button restartBtn;//一个显示时间的文本框TextView timeTv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 设置要显示的视图setContentView(R.layout.activity_main);initView();}private void initView() {ib00 = findViewById(R.id.pt_ib_00x00);ib01 = findViewById(R.id.pt_ib_00x01);ib02 = findViewById(R.id.pt_ib_00x02);ib10 = findViewById(R.id.pt_ib_01x00);ib11 = findViewById(R.id.pt_ib_01x01);ib12 = findViewById(R.id.pt_ib_01x02);ib20 = findViewById(R.id.pt_ib_02x00);ib21 = findViewById(R.id.pt_ib_02x01);ib22 = findViewById(R.id.pt_ib_02x02);timeTv = findViewById(R.id.pt_tv_time);restartBtn = findViewById(R.id.pt_btn_restart);}// 图片按钮的点击事件public void onClick(View view) {}/* 重新开始按钮的点击事件*/public void restart(View view) {}}
2、拼图游戏时间计时
完成基本工作后,我们思考下——如何实现时间的计时操作,这就相当于计时器的功能 。这里我们可以用消息机制来实现,补充下知识点:
当我们的子线程想修改中的UI组件时,我们可以新建一个对象,通过这个对象向主线程发送信息;而我们发送的信息会先到主线程的进行等待,由按先入先出顺序取出,再根据对象的what属性分发给对应的进行处理!
简单来说:就是用来发送消息和处理消息的一种机制,上面这段话可能听起来有些懵,不过没关系,其实没有这么深奥,下面会让大家明白怎么使用它来实现计时的 。
先定义个时间变量,初值为0,因为从0开始计时
//定义计数时间的变量int time = 0;
然后定义发送和处理消息的对象,我们来重写方法,在方法里面我们进行了if判断,如果这条消息的what值为1,那么时间time就+1,然后显示时间为time秒,然后继续向自己发送消息 。
.yed(1,1000)这句话的意思就是:延时1000毫秒后发送参数what为1的空信息,这样它自己就能循环接收自己发的消息,实现计时的功能了,就这么简单 。
当然最开始要发送它一条消息,让它这个方法运转起来,我们在这个方法里面加上了一条
.yed(1,1000); 这样在游戏一开始过了1s,就发送了一条what为1的空消息 。然后它自己又立马接收到了,进行时间加1,又自己发送给自己消息,实现计时!