Android中CountDownTimer 实现倒计时功能
程序员文章站
2023-11-12 17:29:04
countdowntimer
countdowntimer 是android 自带的一个倒计时类,使用这个类可以很简单的实现 倒计时功能
countdowntime...
countdowntimer
countdowntimer 是android 自带的一个倒计时类,使用这个类可以很简单的实现 倒计时功能
countdowntimer 的实现方式
new countdowntimer(6000,1000) {//第一个参数表示的是倒计时的总时间,第二参数表示的是倒计时的间隔时间。 @override public void ontick(long millisuntilfinished) {//倒计时的过程 textview.settext(millisuntilfinished / 1000 + "秒"); } @override public void onfinish() {//倒计时结束 textview.settext("倒计时结束"); } }.start();
实现效果
取消计时器
调用 countdowntimer 的 cancel() 方法,可以为我们取消计时器:但是这个方法,只有在 android 5.0 以上才有效果,在android 5.0 以下并没有效果。如果需要在android 5.0 以下的系统中也使用 cancel,需要我们自己根据 countdowntimer 源码中的 实现方式,重新实现一下。
/** * cancel the countdown. */ public synchronized final void cancel() { mcancelled = true; mhandler.removemessages(msg); } private static final int msg = 1; // handles counting down private handler mhandler = new handler() { @override public void handlemessage(message msg) { synchronized (countdowntimer.this) { if (mcancelled) { return; } final long millisleft = mstoptimeinfuture - systemclock.elapsedrealtime(); if (millisleft <= 0) { onfinish(); } else if (millisleft < mcountdowninterval) { // no tick, just delay until done sendmessagedelayed(obtainmessage(msg), millisleft); } else { long lasttickstart = systemclock.elapsedrealtime(); ontick(millisleft); // take into account user's ontick taking time to execute long delay = lasttickstart + mcountdowninterval - systemclock.elapsedrealtime(); // special case: user's ontick took more than interval to // complete, skip to next interval while (delay < 0) delay += mcountdowninterval; sendmessagedelayed(obtainmessage(msg), delay); } } } };
由于在 android 5.0以上 增加了一个
private boolean mcancelled = false;
所以我们只需要在 5.0 以下的系统中,去掉
if (mcancelled) { return; }
去掉这个判断即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。