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定时器的应用,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!