当前位置: 移动技术网 > IT编程>移动开发>Android > Android中CountDownTimer 实现倒计时功能

Android中CountDownTimer 实现倒计时功能

2019年07月24日  | 移动技术网IT编程  | 我要评论

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;
        }

去掉这个判断即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网