Android中实现倒计时的几种方式

zqm112112 7年前
   <h3><strong>1、使用CountDownTimer</strong></h3>    <pre>  <code class="language-java">private void fun1(){      final CountDownTimer countDownTimer = new CountDownTimer(60000,1000) {          @Override          public void onTick(long l) {              //倒计时每秒的回调              mainBinding.tvUp.setText(l/1000+"");          }          @Override          public void onFinish() {              //倒计时结束          }      };      countDownTimer.start();  }</code></pre>    <h3><strong>2、使用 Handler + Thread</strong></h3>    <pre>  <code class="language-java">private boolean isOk = true;  private int time = 59;  private Handler handler = new Handler(){      public void handleMessage(android.os.Message msg) {          if(msg.what == 0){              mainBinding.tvDown.setText("" + time);              time--;              if(time<=0){                  isOk = false;              }          }      };  };      private void fun2(){      new Thread(){          @Override          public void run() {              while(isOk){                  try {                      Thread.sleep(1000);                      handler.sendEmptyMessage(0);                  } catch (InterruptedException e) {                      e.printStackTrace();                  }              }          }      }.start();  }</code></pre>    <h3><strong>3、使用属性动画(经过对比,发现属性动画倒计时不准确)</strong></h3>    <pre>  <code class="language-java">private void fun2(){          ValueAnimator valueAnimator = ValueAnimator.ofInt(60000,0);          valueAnimator.setDuration(60000);          valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {              @Override              public void onAnimationUpdate(ValueAnimator valueAnimator) {                  int value = (int)(valueAnimator.getAnimatedValue());                  mainBinding.tvMiddle.setText(value/1000+"");              }          });          valueAnimator.start();      }</code></pre>    <p> </p>    <p>来自:http://www.jianshu.com/p/137f24f0c43c</p>    <p> </p>