Android 倒计时器工具类

简介

安卓提供了一个可以用来计算倒计时的类——CountDownTimer,用来设置倒计时

import android.annotation.SuppressLint;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.TextView;

public class CountDownTimerUtils {
    @SuppressLint("StaticFieldLeak")
    private static CountDownTimer timer;

    /**
     * 由于该倒计时类会存在不会显示0秒,且最后1秒实际是接近2秒的时间,因此处理时将剩余秒数多减了一秒
     * 在创建timer时,倒计时的秒数应该多加1秒,自动计时类计时时会产生毫秒值得误差,如果去整数的值
     * 在计算时可能会出现跳秒的情况(实际倒计时的秒数差的不大,就几十毫秒),为了给计秒做补偿,多加500毫秒
     * 保证误差同时也能保证计秒准确
     *
     * @param second      需要设置的倒计时秒数
     * @param view        倒计时运行时需要设置文本变化的控件TextView或者Button
     * @param defaultText 计时结束后view上显示的内容
     */
    public static void getTimer(int second, final View view, final String defaultText) {
        timer = new CountDownTimer(second * 1000 + 1500, 1000) {
            @SuppressLint("DefaultLocale")
            @Override
            public void onTick(long millisUntilFinished) {
                long remainderTime = millisUntilFinished / 1000 - 1;
                //判断view是否是TextView,如果是就设置显示倒计时的文本(Button是TextView子类)
                //如果是TextView的话,设置显示倒计时同时设置view不可点击
                if (view instanceof TextView) {
                    ((TextView) view).setText(String.format("%ds", remainderTime));
                }
                if (remainderTime == 0) {
                    //判断为1秒时,结束计时,并恢复view可以点击
                    onFinish();
                    cancel();
                }
            }

            @Override
            public void onFinish() {
                view.setClickable(true);
                if (view instanceof TextView) {
                    ((TextView) view).setText(defaultText);
                }
            }
        };
        //开启计时器
        timer.start();
        //设置不能被点击
        view.setClickable(false);
    }

    /**
     * 取消计时器计时
     */
    public static void cancelTimer() {
        if (timer != null) {
            timer.cancel();
            timer.onFinish();
        }
    }
}

参考文章:倒计时器CountDownTimer使用_玩偶的心的博客-CSDN博客

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TDSSS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值