每次实现获取短信验证码或者自动刷新倒计时功能的时候,都会习惯性用Handler实现,这两天,发现了一个Android自带的一个倒计时功能类,好开心。分享一下~
首先,先摆一下之前的实现:
private int mSecondsCount = 0 ;
private final Button mGetMSGCodeBtn;
private Handler mHandler= new Handler() {
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
if (msg.what == 301) {
// 验证码倒计时
mSecondsCount--;
if (mSecondsCount <= 0) {
//倒计时完毕,记得恢复初始状态,完成相应功能
removeMessages(301);
} else {
//显示当前倒计秒数的数值
mGetMSGCodeBtn.setText(mSecondsCount + "s");
//进行下一秒的倒计时
sendEmptyMessageDelayed(301, 1000);
}
}
}
};
在请求接口成功后只需要调用
mHandler.removeMessages(301);//该功能确保当前handler的301请求处于初始状态
mHandler.sendEmptyMessage(301);//开始倒计时请求
洋洋洒洒写了一堆老代码之后,发现了新大陆。快看~
private class CountDownSeconds extends CountDownTimer {
public CountDownSeconds(long millisInFuture, long countDownInterval) {//构造函数需要传入的参数是:总共要倒计时的时间,每个多长时间显示的数值发生变化
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
//此处编写倒计时结束的功能(例如恢复控件的初始状态)
mGetMSGCodeBtn.setText("获取短信验证码");
}
@Override
public void onTick(long millisUntilFinished) {
//正在倒计时中
mGetMSGCodeBtn.setText((millisUntilFinished / 1000) + "s");
}
}
调用的时候,只需要
private CountDownSeconds mCountDownSeconds;
if (mCountDownSeconds != null) {
mCountDownSeconds.start();//开始倒计时
}else{
mCountDownSeconds = new CountDownSeconds(60 * 1000, 1000);
mCountDownSeconds.start();
}
if (mCountDownSeconds != null) {
mCountDownSeconds.cancel();//取消倒计时,取消后,如果再调用start()方法,则重新(如上设置的时间,就是又从60s开始)倒计时
}
完毕~撒花~