今天写的是程序的0.4版本。实现了点击屏幕的响应。当点击地洞时,会出现地鼠。

因为不能在子线程里更改View,所以就换了个思路。(参见子线程更新UI会发生android.view.ViewRoot$CalledFromWrongThreadException异常的解决方法 . )

新的逻辑思路是:点击按钮->OnClick()->setMessage()->handleMessage()。因为handler是在主线程生成的,所以不会有问题。

ActivityMain.java 主函数基本没动,就最后一步设置有变化

package com.fsy;import android.app.Activity;import android.os.Bundle;import android.widget.ImageButton;/** * 主Activity * @author fsy * */public class ActivityMain extends Activity {ImageButton b[];Manage manage ;MyClickListener listener;MyHandler myhandler;      public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                myhandler= new MyHandler(getMainLooper());        listener=new MyClickListener();        listener.msg=myhandler.obtainMessage();        manage = new Manage(ActivityMain.this);        b=new ImageButton[9];                b[0]=(ImageButton)findViewById(R.id.image1);        b[1]=(ImageButton)findViewById(R.id.image2);        b[2]=(ImageButton)findViewById(R.id.image3);        b[3]=(ImageButton)findViewById(R.id.image4);        b[4]=(ImageButton)findViewById(R.id.image5);        b[5]=(ImageButton)findViewById(R.id.image6);        b[6]=(ImageButton)findViewById(R.id.image7);        b[7]=(ImageButton)findViewById(R.id.image8);        b[8]=(ImageButton)findViewById(R.id.image9);                        for(int i=0;i<9;i++){        b[i].setOnClickListener(listener);                }        //设置为有地鼠出来了,测试用    for(int i=0;i<9;i++){    Manage.status[i]=1;    }      }}


Manage.java 添加了两个变量和构造函数,把类的对象存在Manage中,使其他类方便调用。

package com.fsy;/** * 一个管理类,将每个类的对象都传进来,类之间公用数据 * @author fsy * */public class Manage {/** * 记录每个鼠洞的状态,0为没出老鼠,1为出来了老鼠 */static int status[]= new int[9];  //记录每个鼠洞的状态,0为没出老鼠,1为出来了老鼠static  ActivityMain activitymain= new ActivityMain();static MyHandler myhandler=new MyHandler();Manage(ActivityMain a){activitymain=a;}Manage(MyHandler myHandler) {myhandler=myHandler;}}

MyClickListener.java 监听器类

package com.fsy;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;/** *ImageButton的Listener 处理点击后的响应  * @author fsy * */public class MyClickListener implements OnClickListener{Manage manage;Message msg;@Overridepublic void onClick(View v) {//每一次必须新生成一个Message,因为mgs还在消息队列中msg=Manage.activitymain.myhandler.obtainMessage();int status=v.getId();switch(status){case R.id.image1 :if(Manage.status[0] ==1){msg.arg1=0;Manage.myhandler.sendMessage(msg);}break;case R.id.image2 :if(Manage.status[0] ==1){msg.arg1=1;Manage.myhandler.sendMessage(msg);}break;case R.id.image3 :if(Manage.status[0] ==1){msg.arg1=2;Manage.myhandler.sendMessage(msg);}break;case R.id.image4 :if(Manage.status[0] ==1){msg.arg1=3;Manage.myhandler.sendMessage(msg);}break;case R.id.image5 :if(Manage.status[0] ==1){msg.arg1=4;Manage.myhandler.sendMessage(msg);}break;case R.id.image6 :if(Manage.status[0] ==1){msg.arg1=5;Manage.myhandler.sendMessage(msg);}break;case R.id.image7 :if(Manage.status[0] ==1){msg.arg1=6;Manage.myhandler.sendMessage(msg);}break;case R.id.image8 :if(Manage.status[0] ==1){msg.arg1=7;Manage.myhandler.sendMessage(msg);}break;case R.id.image9 :if(Manage.status[0] ==1){msg.arg1=8;Manage.myhandler.sendMessage(msg);}break;}}}


MyHandler.java 消息接收器。

package com.fsy;import android.os.Handler;import android.os.Looper;import android.os.Message;public class MyHandler extends Handler{Manage manage;int index;public MyHandler(Looper looper) {super(looper);manage=new Manage(this);}public MyHandler() {super();}@Overridepublic void handleMessage(Message msg) {index=msg.arg1;Manage.activitymain.b[index].setImageResource(R.drawable.hitted);}}


更多相关文章

  1. Android(安卓)Studio升级提示 Connection failed. Please check
  2. android点击事件分发
  3. listview 中Item中含有Button 等造成Item点击无效的解决方法
  4. Android(安卓)Studio Live Templates 详解
  5. Eclipse中Android显示注释文档的办法和Android源码的显示办法
  6. eclipse中OpenCV安装指南
  7. android初学之Hello World
  8. popupwindow的一些注意事项
  9. Android-配置文件中设置“android:clickable="false"无效的原因

随机推荐

  1. Android之RAS加密算法测试
  2. smartwindow
  3. android 代码混淆总结
  4. android加载大图片
  5. android基础控件(4)GridView实现网格视图
  6. Android(安卓)自动完成文本框的实例
  7. android studio 实现再按一次返回键退出
  8. Android(安卓)音效提示与振动提示
  9. Android联网方式判断
  10. android短信监听