Handler类的主要作用有两个:1:在新启动的线程中发送消息。2:在主线程中获取、处理消息。下面代码通过一个新的线程来周期性的修改ImageView所显示的图片,实现一个自动播放的动画。
主代码:
public class MainActivity extends Activity {
int[] images = new int[] { R.drawable.p1, R.drawable.p2, R.drawable.p3,
R.drawable.p4, R.drawable.p5 };
int imagesid = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//去掉窗口标题
ActionBar actionBar =getActionBar();
actionBar.hide();
final ImageView show = (ImageView) findViewById(R.id.show);
final Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 如果该消息是本程序所发出的
//此处填写int型的值且与Timer里的一样即可
if (msg.what == 10) {
// 动态的修改所显示的图片
/*[imagesid++ % images.length]实现图片循环
如果只做imagesid++,循环完一圈程序会报错*/
show.setImageResource(images[imagesid++ % images.length]);
}
super.handleMessage(msg);
}
};
//定义一个计时器,让该计时器周期性的执行指定任务
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// 发送空消息
myHandler.sendEmptyMessage(10);
}
},0,1200);
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/show"
/>
</LinearLayout>
运行效果: