Android 定时器实现图片的变换
Android定时器实现图片的变换
在Android中,要让每秒进行一次ui更新,就需要利用到定时器和handler,message的结合,如果不使用handler就不能达到更新ui的效果,我的理解是handler中存在一个队列问题,可以保证不产生阻塞。
代码如下:
importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.util.Log; importandroid.widget.ImageView; importandroid.widget.LinearLayout; publicclassMainActivityextendsActivity { privateLinearLayoutlinearlayout; privateImageViewmain_imageview; privateinti=0; Timertimer=newTimer(); privateHandlerhandler=newHandler() { @Override publicvoidhandleMessage(Messagemsg) { Log.e("@@@",i+""); //index=msg.what; if(i>6) { i=0; } else { switch(i) { case1: main_imageview.setImageResource(R.drawable.loader_frame_1); break; case2: main_imageview.setImageResource(R.drawable.loader_frame_2); break; case3: main_imageview.setImageResource(R.drawable.loader_frame_3); break; case4: main_imageview.setImageResource(R.drawable.loader_frame_4); break; case5: main_imageview.setImageResource(R.drawable.loader_frame_5); break; case6: main_imageview.setImageResource(R.drawable.loader_frame_6); break; default: break; } linearlayout.invalidate(); } super.handleMessage(msg); } }; /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } publicvoidinitView() { linearlayout=(LinearLayout)findViewById(R.id.background_main); main_imageview=(ImageView)findViewById(R.id.main_imageview); timer.scheduleAtFixedRate(newTimerTask() { @Override publicvoidrun() { //TODOAuto-generatedmethodstub i++; Messagemesasge=newMessage(); mesasge.what=i; handler.sendMessage(mesasge); } },0,500); } @Override protectedvoidonDestroy() { //TODOAuto-generatedmethodstub timer.cancel(); super.onDestroy(); } }
在这段代码中有两点需要注意:
第一:在更新完图片后,需要刷新整个布局,linearlayout.invalidate();
第二:在用完定时器timer后,要在Activity被干掉的同时销毁定时器timer。
以上就是Android定时器的应用,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!