前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >倒计时工具类

倒计时工具类

作者头像
晨曦_LLW
发布2020-09-25 13:39:26
6010
发布2020-09-25 13:39:26
举报

CountDownTimer

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
			@BindView(R.id.get_code)
    		TextView getCode;
    		
			CountDownTimerUtils countDownTimerUtils = new CountDownTimerUtils(getCode, 60000, 1000);
            countDownTimerUtils.start();

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

工具类如下所示:

代码语言:javascript
复制
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中的,没有第三方的包。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CountDownTimer
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档