Handle类的主要作用有两个:
一:在新启动的线程中发送消息 二:在主线程中获取、处理消息
下面通过一个新线程来周期性的修改ImageView所显示的图片,通过这种方式来开发一个动画效果,代码如下:
public class MainActivity extends Activity {
int[] imageIds = new int[]{
R.drawable.a,//a,b,c,d,e分别表示5张图片资源的名称
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
};
int currentImageId = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView show = findViewById(R.id.show);
final Handler myhandler = new Handler(){
@Override
public void handleMessage(Message msg) { //Handler在主线程接收消息0x1233,并往下执行更改图片
//如果该消息是本程序发送的
if(msg.what == 0x1233){
//动态的修改所显示的图片
show.setImageResource(imageIds[currentImageId++%imageIds.length]);
}
}
};
//定义一个计数器,让该计时器周期性的执行指定的任务
new Timer().schedule(new TimerTask() {
@Override
public void run() {
myhandler.sendEmptyMessage(0X1233); //新线程往主线程发送消息0x1233
}
},0,1200);
//Timer().schedule(TimerTask task, Date when, long period);三个参数的意思分别是:
/*
1 ,task:所安排的时间线程
2,when:第一次执行的时间
3, period:间隔的执行时间
*/
}
}