美文网首页
android 倒计时

android 倒计时

作者: cain07 | 来源:发表于2020-07-05 18:40 被阅读0次

1.第一个样例 利用Handler实现倒计时

  public class TimeThread extends Thread {
        @Override
        public void run () {
            do {
                try {
                    Thread.sleep(1000);
                    Message msg = new Message();
                    msg.what = msgKey1;
                    mHandler.sendMessage(msg);
                }
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } while(true);
        }
    }
private Handler mHandler = new Handler() {
        @Override
        public void handleMessage (Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case msgKey1:
                    //获取分钟数
                    long sysTime = System.currentTimeMillis();
                    DateFormat formatter = new SimpleDateFormat("mm");
                    final String format = formatter.format(sysTime);
                    int i = Integer.parseInt(format);
 
                    //倒计时
                    SimpleDateFormat sdfStopTime = new SimpleDateFormat("mm:ss", Locale.ENGLISH);
                    if(i < 30){
                        String newStoptime = sdfStopTime.format(new Date(30 * 60 * 1000 - System.currentTimeMillis() ));
                        mTime.setText("倒计时:"+newStoptime); 
                        break;
                    }else{
                        String newStoptime = sdfStopTime.format(new Date(60 * 60 * 1000 - System.currentTimeMillis() ));
                        mTime.setText("倒计时:"+newStoptime); 
                        break;
                    }
                default:
                    break;
            }
        }
    };
image.png

2.第二个样例 使用 CountDownTimer

CountDownTimer是android中自带的倒计时类
需要两个参数,一个是总计时的时间,一般验证码是60秒,就是60*1000。第二个参数是设置计时的速度,1000就是每秒一次。

如果总长度是10秒,速度是1,那么就是10-9-8-7-6-5-4-3-2-1-0;

如果总长度是10秒,速度是2,那么就是10-8-6-4-2-0;
总时间是不变的,如果需要更精确的计时展现,就修改第二个参数。

在创建对象的时候,需要重写onTick和onFinish的方法。
onTick就是我们剩余的时间,需要将之转化成秒展示出来。
在倒计时的过程中把按钮禁用。

然后在onFinish倒计时结束的时候,按钮启用。

最后通过.start启动倒计时。

 /**
     * 倒计时显示
     */
    private void countDown() {
       /**
         * CountDownTimer timer = new CountDownTimer(3000, 1000)中,
         * 第一个参数表示总时间,第二个参数表示间隔时间。
         * 意思就是每隔一秒会回调一次方法onTick,然后1秒之后会回调onFinish方法。
         */
        CountDownTimer timer = new CountDownTimer(10000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                button4.setEnabled(false);
                button4.setText("已发送(" + millisUntilFinished / 1000 + ")");
            }

            @Override
            public void onFinish() {
                button4.setEnabled(true);
                button4.setText("重新获取验证码");

            }
        }.start();
    }

3、使用Timer和TimerTask

/**
 * 倒计时显示3
 */
    private Timer timer = new Timer();
    private void countDown3() {


        TimerTask task = new TimerTask() {
            @Override
            public void run() {

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        time--;
                        button4.setText("已发送(" + String.valueOf(time) + ")");
                        button4.setEnabled(false);
                        if (time <= 0) {
                            time = 10;
                            button4.setEnabled(true);
                            button4.setText("重新获取验证码");
                        }
                    }
                });
            }
        };
       //调用方法
        timer.schedule(task, time, 1000);
    }

写法二

 Timer timer = new Timer();
        timer.schedule(new TimerTask() {
          
            @Override
            public void run() {
                Message message = new Message();
                message.arg1 = count;
                if(count!=-1){
                    count--;
                }else {
                    return;
                }
                handler.sendMessage(message);
            }
        }, 1000,1000);

4.利用动画实现倒计时

 ValueAnimator animator = ValueAnimator.ofInt(5,0);
        //设置时间
        animator.setDuration(5000);
        //均匀显示
        animator.setInterpolator(new LinearInterpolator());
        //监听
        animator.addUpdateListener(new AnimatorUpdateListener() {
            
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int value = (Integer) animation.getAnimatedValue();
                tv.setText(value+"");
                if(value==0){
                    startActivity(new Intent(MainActivity.this,Second.class));
                }
            }
        });
        animator.start();

相关文章

网友评论

      本文标题:android 倒计时

      本文链接:https://www.haomeiwen.com/subject/wqnvqktx.html