public class DownTimer {
private long totalTime = -1;
private long intervalTime = 0;
private long remainTime;
private long systemAddTotalTime;
private static final int TIME = 1;
private TimeListener listener;
private long curReminTime;
private boolean isPause = false;
private boolean isRuning = false;
public DownTimer() {
}
public void setIntervalTime(long intervalTime) {
this.intervalTime = intervalTime;
}
public void setTotalTime(long totalTime) {
this.totalTime = totalTime;
}
public long getIntervalTime() {
return intervalTime;
}
public long getTotalTime() {
return totalTime;
}
public void start() {
if (totalTime <= 0 && intervalTime <= 0) {
return;
}
isRuning = true;
systemAddTotalTime = SystemClock.elapsedRealtime() + totalTime;
if (null != mHandler)
mHandler.sendEmptyMessage(TIME);
}
public void cancel() {
if(mHandler !=null)
{
isRuning = false;
mHandler.removeMessages(TIME);
mHandler = null;
}
}
public void pause() {
if(mHandler !=null && isRuning)
{
mHandler.removeMessages(TIME);
isPause = true;
curReminTime = remainTime;
}
}
public void resume() {
if (isPause == true && isRuning) {
isPause = false;
totalTime = curReminTime;
start();
}
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TIME:
if (!isPause)
soloveTime();
break;
case 2:
isPause = true;
break;
default:
break;
}
}
};
private void soloveTime() {
remainTime = systemAddTotalTime - SystemClock.elapsedRealtime();
if (remainTime <= 0) {
if (listener != null) {
listener.onFinish();
cancel();
}
} else if (remainTime < intervalTime) {
if (null != mHandler)
mHandler.sendEmptyMessageDelayed(TIME, remainTime);
} else {
long curSystemTime = SystemClock.elapsedRealtime();
if (listener != null) {
listener.onInterval(remainTime);
}
long delay = curSystemTime + intervalTime - SystemClock.elapsedRealtime();
while (delay < 0) delay += intervalTime;
if (null != mHandler) {
mHandler.sendEmptyMessageDelayed(TIME, delay);
}
}
}
public interface TimeListener {
public void onFinish();
public void onInterval(long remainTime);
}
public void setTimerLiener(TimeListener listener) {
this.listener = listener;
}
}
使用:
mTimer = new DownTimer();
mTimer.setIntervalTime(1000);//设置间隔数
mTimer.setTimerLiener(new DownTimer.TimeListener() {
@Override
public void onFinish() {
mTxt_time.setText("恭喜你已完成学习!");
}
@Override
public void onInterval(long remainTime) {
String minuteSur = "";
String secondSur = "";
long minute = remainTime / 60000;
long seconds = remainTime % 60000;
long second = Math.round((float) seconds / 1000);
if (minute < 10) {
minuteSur += "0";
}
minuteSur += minute;
if (second < 10) {
secondSur += "0";
}
secondSur += second;
mTxt_time.setText("还需 " + minuteSur + " 分钟 " + secondSur + " 秒可完成学习啦,加油!");
}
});