CountDownTimer类与倒计时功能的实现

一、CountDownTimer类

先简单讲一讲CountDownTimer类。源码中给出的解释以及小例子为:

Schedule a countdown until a time in the future, with regular notifications on intervals along the way.
—–执行一段倒计时,在倒计时执行过程中会在固定间隔时间得到通知(即触发onTick方法)。
Example of showing a 30 second countdown in a text field:


     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }   }.start();

The calls to onTick(long) are synchronized to this object so that one call to onTick(long) won’t ever occur before the previous callback is complete. This is only relevant when the implementation of onTick(long) takes an amount of time to execute that is significant compared to the countdown interval.
—–onTick方法是同步执行的,即下次调用本方法之前应当保证这次执行已经完成。这里的同步机制只在 onTick方法花费时间执行的东西 比 倒计时的时间间隔内执行的东西更重要时(这里不是太准确,如果想到更好的词时再补充) 有意义。

1.构造函数

public CountDownTimer (long millisInFuture, long countDownInterval)

参数
millisInFuture—–从开始调用start()方法到倒计时完成并执行完onFinish()方法的毫秒数。即你要倒计时的总时间。
countDownInterval—–接收onTick(long)回调的间隔时间。即倒计时的时间间隔。

2.公共方法

①public final void cancel ()

取消倒计时(取消后,再次启动会重新开始倒计时) 。

②public abstract void onFinish ()

倒计时完成时被调用 。

③public abstract void onTick (long millisUntilFinished)

固定间隔被调用 。
参数 :
millisUntilFinished—–倒计时剩余时间。

④public synchronized final CountDownTimer start ()

启动倒计时


二、SystemClock类

有两个主要的静态方法uptimeMillis()和 elapsedRealtime().

①native public static long uptimeMillis();
Returns milliseconds since boot, not counting time spent in deep sleep. This value may get reset occasionally.
uptimeMillis()返回的是系统从启动到当前处于非休眠期的时间。

②native public static long elapsedRealtime();
Returns milliseconds since boot, including time spent in sleep.
elapsedRealTime()返回的是系统从启动到现在的时间。

③public static void sleep(long ms);
这个方法就是封装了Thread.sleep方法,但是不会抛出InterruptedException.


三、倒计时功能的实现

倒计时工具类

package com.makepolo.finance.utils;

import android.app.Activity;
import android.graphics.Color;
import android.os.CountDownTimer;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.widget.Button;

public class TimeCountUtil extends CountDownTimer {

    private Activity mActivity;
    private Button btn;

    /**
     * 
     * @param mActivity
     *            传入相应的Activity
     * @param millisInFuture
     *            总时间
     * @param countDownInterval
     *            倒计时时间间隔
     * @param btn
     *            需要倒计时的Button
     */
    public TimeCountUtil(Activity mActivity, long millisInFuture,
            long countDownInterval, Button btn) {
        super(millisInFuture, countDownInterval);
        this.mActivity = mActivity;
        this.btn = btn;
    }

    //这里设置每次间隔之后要执行的代码
    @Override
    public void onTick(long millisUntilFinished) {
        btn.setClickable(false);// 设置不能点击
        if (millisUntilFinished / 1000 <= 9) {// 设置倒计时时间
            btn.setText("0" + millisUntilFinished / 1000 + "秒后可重新发送");
        } else {
            btn.setText(millisUntilFinished / 1000 + "秒后可重新发送");
        }
        Spannable span = new SpannableString(btn.getText().toString());// 获取按钮的文字
        span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2,
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE);// 将倒计时的两位数字显示为红色
        btn.setText(span);
    }

    //这里设置计数完成时要执行的任务
    @Override
    public void onFinish() {
        btn.setText("重新获取验证码");
        btn.setClickable(true);// 重新获得点击
    }

}

应用:

TimeCountUtil timeCountUtil = new TimeCountUtil(this,60000, 1000, bt_get_code);
timeCountUtil.start();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值