欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中CountDownTimer 实现倒计时功能

程序员文章站 2023-12-01 15:35:22
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();

实现效果

Android中CountDownTimer 实现倒计时功能

取消计时器

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

去掉这个判断即可。

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