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

Home / Android MrLee 2016-11-22 4171

 

1、使用CountDownTimer


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

2、使用 Handler + Thread


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

3、使用属性动画(经过对比,发现属性动画倒计时不准确)


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

来自:http://www.jianshu.com/p/137f24f0c43c

本文链接:https://www.it72.com/11070.htm

推荐阅读
最新回复 (1)
  • jackeyla 2016-11-22
    引用 2
    第二个方法其实直接用handler的postDelay,不需要线程。
返回