Android实现倒计时方法汇总
Android开发中经常会有倒计时的功能,下面将总结出常见的集中实现方式。
1.直接使用Handler的消息机制来实现
xml布局中文件如下:
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clickButton" android:text="开始计时"/> </LinearLayout>
java代码如下:
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.View;
importandroid.widget.Button;
publicclassFirstActivityextendsActivity{
privateButtonbutton;
privateintcount=60;
privateintCOUNT_TIME=0;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
button=(Button)findViewById(R.id.button);
}
privateHandlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
if(count<=0){
count=60;
button.setText("重新计时");
button.setClickable(true);
return;
}
count--;
button.setText(""+count);
sendEmptyMessageDelayed(COUNT_TIME,1000);
}
};
publicvoidclickButton(Viewview){
handler.sendEmptyMessage(COUNT_TIME);
button.setClickable(false);
}
}
2.使用Timer和TimerTask,结合handler一起实现倒计时
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.View;
importandroid.widget.Button;
publicclassFirstActivityextendsActivity{
privateButtonbutton;
privateintcount=30;
privateintCOUNT_TIME=0;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
button=(Button)findViewById(R.id.button);
}
privateHandlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
button.setText(""+count);
if(count<=0){
count=30;
button.setClickable(true);
button.setText("重新计时");
timerTask.cancel();//取消该任务
}
}
};
privateTimertimer=newTimer();
privateTimerTasktimerTask;
publicvoidclickButton(Viewview){
button.setClickable(false);
timerTask=newTimerTask(){
@Override
publicvoidrun(){
count--;
handler.sendEmptyMessage(COUNT_TIME);
}
};
timer.schedule(timerTask,0,1000);//0秒后,每过一秒钟执行一次该任务
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
//释放资源
if(timerTask!=null){
timerTask.cancel();
timerTask=null;
}
if(timer!=null){
timer.cancel();
timer=null;
}
}
}
3.使用android自带的原生倒计时类CountDownTimer
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.CountDownTimer;
importandroid.view.View;
importandroid.widget.Button;
publicclassFirstActivityextendsActivity{
privateButtonbutton;
privateCountDownTimertimer;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
button=(Button)findViewById(R.id.button);
}
publicvoidclickButton(Viewview){
button.setClickable(false);
//第一个参数:倒计时的毫秒数;第二个参数:接收onTick回调的时间间隔
timer=newCountDownTimer(30000,10){
publicvoidonTick(longmillisUntilFinished){
button.setText(millisUntilFinished/1000+"秒");
}
publicvoidonFinish(){
button.setText("重新计时");
button.setClickable(true);
}
};
timer.start();
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
if(timer!=null){
timer.cancel();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。