消息传送 Handler

来源:互联网 发布:java array list 泛型 编辑:程序博客网 时间:2024/06/10 06:36

      主要接受子线程发送的数据, 并用此数据配合主线程更新UI.子线程不能分配任务。因此,可以由Handler  发送消息给主线程,告诉主线程应该做什么任务,由主线程来分配。

      图片切换,由切换按钮控制图片开始切换,由停止按钮控制图片停止切换。

      java代码:

      图片自动切换类:    

import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;/** * 图片自动切换类 * @author Administrator * */public class ChangeImageActivity extends Activity {/**标识*/    public static final int IMAGE_CHANGE=1;    /**消息传送类*/    private Handler handler;    /**下标*/    private int index;    /**图片切换状态标识*/    private boolean state=true;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.changeimage_main);        //创建一个消息传送对象        handler = new ChangeImageHandler(this);        //得到两个按钮对象        Button btn1 = (Button) findViewById(R.id.button1);        Button btn2 = (Button) findViewById(R.id.button2);        /**         *  开始切换图片监听         */        btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {state=true;//实现多次切换//子线程new Thread(){public void run(){//for循环第一个参数未写,表示再次切换从上次停止切换时的那一张开始切换。//若该参数是0,则每一次切换都会从第一张图片开始切换for(;state;index++){if(index==5){//不断切换index=0;}//创建消息对象Message msg = new Message();//标识msg.what = IMAGE_CHANGE;//创建存放数据的map对象Bundle bundle = new Bundle();bundle.putInt("index", index);msg.setData(bundle);//传送消息handler.sendMessage(msg);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}.start();  }});        /**         * 停止切换图片监听         */        btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {state=false;}});    }}

 

     消息传送类:

    

package com.lovo;import android.os.Handler;import android.os.Message;import android.widget.ImageView;/** * 消息传送类 * @author Administrator * */public class ChangeImageHandler extends Handler{/**图片切换activity*/private ChangeImageActivity activity;/**图片数组*/private int[]image=new int[]{R.drawable.whatsnew_fornew_01,R.drawable.whatsnew_fornew_02,R.drawable.whatsnew_fornew_03,R.drawable.whatsnew_fornew_04,R.drawable.whatsnew_fornew_05};;public ChangeImageHandler(ChangeImageActivity changeImageActivity){this.activity = changeImageActivity;}/** * 接收消息 */@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if(msg.what==ChangeImageActivity.IMAGE_CHANGE){//设置图片显示ImageView imageView=(ImageView) activity.findViewById(R.id.change_image_imageView);imageView.setImageResource(image[msg.getData().getInt("index")]);}}}

 

     XML:

     

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <LinearLayout        android:id="@+id/btn_layout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"         android:gravity="center"        android:padding="40dp">        <Button            android:id="@+id/button1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="切换" />        <Button             android:id="@+id/button2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="停止"/>    </LinearLayout>    <ImageView        android:id="@+id/change_image_imageView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@id/btn_layout" /></RelativeLayout>


 

原创粉丝点击