倒计时工具类

CountDownTimer

如果你赶时间就是直接复制文章最后的工具类粘贴到你的项目中使用即可

在APP开发过程中我们通常会有一个获取手机验证码这样的一个操作,其中有一个倒计时 一般来说就是60s,倒计时期间不可点击 ,计时结束之后重新获取验证码。如下图所示

在这里插入图片描述

在这里插入图片描述
如图所示这样子,就是倒计时的实现过程了。我们来看一下这个工具类的使用方法

			@BindView(R.id.get_code)
    		TextView getCode;
    		
			CountDownTimerUtils countDownTimerUtils = new CountDownTimerUtils(getCode, 60000, 1000);
            countDownTimerUtils.start();

getCode就是你用来上图中的 获取验证码的控件名称,60000毫秒就是60秒 1000毫秒就是1秒 ,总时长60s 开始倒计时 一般来说是用button,但是,我这里用的是TextView(个人喜好) ,当我点击时就会进行倒计时,然后文字会变成倒计时。

工具类如下所示:

public class CountDownTimerUtils extends CountDownTimer {
    WeakReference<TextView> tvCodeWr;//控件软引用,防止内存泄漏
    CountDownTimer timer;

    /**
     * @param textView          The TextView
     * @param millisInFuture    The number of millis in the future from the call
     *                          to {@link #start()} until the countdown is done and {@link #onFinish()}
     *                          is called.
     * @param countDownInterval The interval along the way to receiver
     *                          {@link #onTick(long)} callbacks.
     */
    public CountDownTimerUtils(TextView textView, long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        tvCodeWr = new WeakReference<>(textView);
        timer = this;
    }

    @Override
    public void onTick(long millisUntilFinished) {
        TextView mTextView = tvCodeWr.get();
        if (mTextView != null) {
            mTextView.setClickable(false); //设置不可点击
            mTextView.setText(millisUntilFinished / 1000 + "秒");  //设置倒计时时间
            //    mTextView.setBackgroundResource(R.drawable.bg_identify_code_press); //设置按钮为灰色,这时是不能点击的

            /**
             * 超链接 URLSpan
             * 文字背景颜色 BackgroundColorSpan
             * 文字颜色 ForegroundColorSpan
             * 字体大小 AbsoluteSizeSpan
             * 粗体、斜体 StyleSpan
             * 删除线 StrikethroughSpan
             * 下划线 UnderlineSpan
             * 图片 ImageSpan
             * http://blog.csdn.net/ah200614435/article/details/7914459
             */
            SpannableString spannableString = new SpannableString(mTextView.getText().toString());  //获取按钮上的文字
            ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);
            /**
             * public void setSpan(Object what, int start, int end, int flags) {
             * 主要是start跟end,start是起始位置,无论中英文,都算一个。
             * 从0开始计算起。end是结束位置,所以处理的文字,包含开始位置,但不包含结束位置。
             */
            spannableString.setSpan(span, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//将倒计时的时间设置为红色
            mTextView.setText(spannableString);
        } else {
            if (timer != null) {
                timer.cancel();
                timer = null;
            }
        }
    }

    @Override
    public void onFinish() {
        TextView mTextView = tvCodeWr.get();
        if (mTextView != null) {
            mTextView.setText("获取验证码");
            mTextView.setClickable(true);//重新获得点击
        } else {
            if (timer != null) {
                timer.cancel();
                timer = null;
            }
        }
    }

}

这个工具类,可以复制粘贴直接使用的,但需要导一些包进去,都是As中的,没有第三方的包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

初学者-Study

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

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

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

打赏作者

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

抵扣说明:

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

余额充值