HardBirch

【android】 Handler类代码使用示例

时间:12-12-14 栏目:Android类详解与使用示例 作者:魔豆先生 评论:0 点击: 2,847 次

 

创建一个名为Sample_9_9的Android项目。
准备程序中需要的图片,将图片资源存放到res/drawable-mdpi目录下,如图1所示。

图1  用到的图片资源

编写布局文件main.xml,用下列代码替换其原有代码。

  1. 1   <?xml version="1.0" encoding="utf-8"?><!-- XML的版本及编码方式 -->
  2. 2   <LinearLayout xmlns:android="http://schemas.
    android.com/apk/res/android"
  3. 3       android:orientation="vertical"
  4. 4       android:layout_width="fill_parent"
  5. 5       android:layout_height="fill_parent"
  6. 6       android:gravity="center"    >   <!-- 添加垂直的线性布局 -->
  7. 7   <ImageView
  8. 8       android:id="@+id/myImageView"
  9. 9       android:layout_width="fill_parent"
    android:layout_height="wrap_content"
  10. 10      android:src="@drawable/bbta"
  11. 11      android:gravity="center"  />    <!-- 添加ImageView控件-->
  12. 12  </LinearLayout>

代码位置:见随书光盘中源代码/第7章/ Sample_7_9/res/layout目录下的main.xml。

说明:该段代码非常简单,只需向原有的垂直线性布局中添加一个ImageView控件,并为其指定ID及图片资源即可。

开发换图的线程。在src/wyf/ytl目录下新建一个MyThread.java文件,开发如下所示的代码。

  1. 1   package wyf.ytl;    //声明所在包
  2. 2   public class MyThread extends Thread{//继承自线程类
  3. 3       Sample_7_9 activity;            //activity的引用
  4. 4       int what = 1;   //发送消息的what值
  5. 5       public MyThread(Sample_7_9 activity){           //构造器
  6. 6           this.activity = activity;   //得到activity的引用
  7. 7       }
  8. 8       @Override
  9. 9       public void run() {         //重写的run方法
  10. 10          while(true){//循环
  11. 11activity.myHandler.sendEmptyMessage((what++)%4);  //发送消息
  12. 12try{
  13. 13  Thread.sleep(2000);//睡眠两秒钟
  14. 14}
  15. 15catch(Exception e){   //捕获异常
  16. 16  e.printStackTrace();//打印异常信息
  17. 17}}}}

代码位置:见随书光盘中源代码/第7章/ Sample_7_9/src/wyf/ytl目录下的MyThread.java。

说明:可以看到,MyThread类为一个线程类,在线程的run方法中,每隔2000毫秒向Activity的myHandler发送一条消息,并对what变量循环自加,这样每次发送消息的what值是不同的。

开发主逻辑代码。打开Sample_7_9.java文件,用下列代码替换其原有代码。

  1. 1   package wyf.ytl;        //声明所在包
  2. 2   import android.app.Activity;            //引入相关类
  3. 3   import android.os.Bundle; //引入相关类
  4. 4   import android.os.Handler;          //引入相关类
  5. 5   import android.os.Message;          //引入相关类
  6. 6   import android.widget.ImageView;        //引入相关类
  7. 7   public class Sample_7_9 extends Activity {
  8. 8       ImageView myImageView;          //ImageView的引用
  9. 9           Handler myHandler = new Handler(){  //创建一个Handler对象
  10. 10          @Override
  11. 11          public void handleMessage(Message msg) {
    //重写接收消息的方法
  12. 12switch(msg.what){         //判断what的值
  13. 13case 0:   //what值为0时
  14. 14  myImageView.setImageResource(R.drawable.bbta);break;
  15. 15case 1:   //what值为1时
  16. 16  myImageView.setImageResource(R.drawable.bbtb);break;
  17. 17case 2:   //what值为2时
  18. 18  myImageView.setImageResource(R.drawable.bbtc);break;
  19. 19case 3:   //what值为3时
  20. 20  myImageView.setImageResource(R.drawable.bbtd);break;
  21. 21}
  22. 22super.handleMessage(msg);
  23. 23          }
  24. 24      };
  25. 25      @Override
  26. 26      public void onCreate(Bundle savedInstanceState)
    {       //重写的onCreate方法
  27. 27          super.onCreate(savedInstanceState);
  28. 28          setContentView(R.layout.main);
    //设置当前的用户界面
  29. 29          myImageView = (ImageView) findViewById
    (R.id.myImageView);       //得到ImageView的引用
  30. 30          MyThread myThread = new MyThread(this);
    //初始化MyThread线程
  31. 31          myThread.start();//启动线程
  32. 32      }
  33. 33  }

第8行声明ImageView控件的引用。

第9~24行创建一个Handler对象,并重写handleMessage方法用来接收消息,当收到消息时,根据消息的what值的不同为myImageView设置不同的图片。

第25~32行为重写的onCreate方法,在该方法中先设置当前的用户界面,然后得到ImageView的引用,最后初始化并启动后台线程。

运行该程序观察运行效果,如图2所示,每隔两秒钟自动更换下一张照片。

图2  Handler消息机制案例

示例代码完整下载

 

 

 

声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: 【android】 Handler类代码使用示例

【android】 Handler类代码使用示例:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐