Android倒计时功能实现
/**
* 倒计时
*
* Created by feathers on 16-9-18.
* @author Feathers
*/
public abstract class CountTimer {
private Handler mHandler;
private Timer mTimer;
private TimerTask mTask;
private int TIME = 0;
private TextView textView;
/**
* 创建一个倒计时,以秒为单位
*
* @param timeSec 倒计时时间
* @param textView 倒计时要显示在哪个textView
*/
public CountTimer(int timeSec, TextView textView) {
this.TIME = timeSec;
this.textView = textView;
initCountTimer();
}
/**
* 初始化倒计时
*/
public void initCountTimer() {
UIUtils.runOnUIThread(new Runnable() {
@Override
public void run() {
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x123) {
int i = msg.arg1;
if (textView != null) {
textView.setText("跳过" + String.valueOf(i) + "s");
}
/*显示完后 在次启动计时器*/
if (TIME > 0) {
startTimer();
} else {
onFinish();
}
}
}
};
}
});
}
public void startTimer() {
mTimer = new Timer();
mTask = new TimerTask() {
@Override
public void run() {
TIME--;
Message msg = mHandler.obtainMessage();
msg.what = 0x123;
msg.arg1 = TIME;
mHandler.sendMessage(msg);
}
};
mTimer.schedule(mTask, 1000);
}
/**
* 重新设置事件,并运行倒计时
*
* @param timerSec
*/
public void setTime(int timerSec) {
this.TIME = timerSec;
startTimer();
}
/**
* 终止任务
*/
public void stopTimer() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (mTask != null) {
mTask.cancel();
mTask = null;
}
}
/**
* 计时结束后要做的事情
*/
protected abstract void onFinish();
}一、UI设计
二、逻辑实现
最后更新于
