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:間隔的執行時間
*/
}
}