倒计时工具类

简介: 倒计时工具类

CountDownTimer


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


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

20190906095632717.png

20190906095749534.png

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

      @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中的,没有第三方的包

相关文章
|
机器学习/深度学习 传感器 数据采集
机器学习赋能制造业:预测性维护、质量控制和智能物流优化
制造业借助机器学习和深度学习提升效率,通过预测性维护避免设备故障,利用质量控制模型检测产品缺陷,及运用智能物流优化降低运输成本。示例代码包括基于LSTM的设备故障预测和随机森林分类器的质量控制模型。这些技术革新生产流程,提高效率,降低成本,增强企业竞争力。
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
464 68
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
存储 自然语言处理 算法
知识图谱算法有哪些
知识图谱是以图结构描述的知识。与传统数据库相比,知识图谱在存储、查询、检索方面具有诸多优势。传统数据库对数据的组织是以字段为单位,而知识图谱通过关系、属性和实体等数据类型,将数据组织成复杂的图,使其更容易理解。
|
数据可视化 安全 数据挖掘
开源数据可视化分析工具DataEase本地部署并实现远程访问
开源数据可视化分析工具DataEase本地部署并实现远程访问
|
Java 调度 开发工具
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
1307 0
|
JavaScript IDE Java
bugly崩溃排查3:观察是谁调用了崩溃函数
bugly崩溃排查3:观察是谁调用了崩溃函数
233 0
|
前端开发 JavaScript
【面试题】如何避免使用过多的 if else?
【面试题】如何避免使用过多的 if else?
142 0
|
XML Java 数据处理
springMvc项目集成cxf实现webService通信方式的详细步骤
springMvc项目集成cxf实现webService通信方式的详细步骤
springMvc项目集成cxf实现webService通信方式的详细步骤