您的位置:首页 > 移动开发 > Android开发

使用 CountDownTimer 实现验证码倒计时

2016-04-05 17:14 435 查看

CountDownTime 是android

给我们提供的一个倒计时的类使用这个类避免了我们在代码里写很多冗余的代码 。



源码是这样解说这个类的:

在安排的倒计时里,在时间到来为止,随着时间的间隔去有规律的通知。以下就是源码的说明和用例:

Schedule a countdown until a time in the future, with

regular notifications on intervals along the way.

*

Example of showing a 30 second countdown in a text field:

*



new CountDownTimer(30000, 1000) {

*

public void onTick(long millisUntilFinished) {

mTextField.setText(“seconds remaining: ” + millisUntilFinished / 1000);

}

*

public void onFinish() {

mTextField.setText(“done!”);

}

}.start();

`

在源码中最核心的代码就是

hadlerMessager()......
`  /**
* Start the countdown.
*/
public synchronized final CountDownTimer start() {
mCancelled = false;
if (mMillisInFuture <= 0) {
onFinish();
return this;
}
mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture;
在这里发送了一个消息
mHandler.sendMessage(mHandler.obtainMessage(MSG));
return this;
}`

`  // handles counting down
private Handler mHandler = new Handler() {

@Override
public void handleMessage(Message msg) {

synchronized (CountDownTimer.this) {
if (mCancelled) {
return;
}

final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();

if (millisLeft <= 0) {
onFinish();
} else if (millisLeft < mCountdownInterval) {
// no tick, just delay until done
sendMessageDelayed(obtainMessage(MSG), millisLeft);
} else {
long lastTickStart = SystemClock.elapsedRealtime();
onTick(millisLeft);

// take into account user's onTick taking time to execute
long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();

// special case: user's onTick took more than interval to
// complete, skip to next interval
while (delay < 0) delay += mCountdownInterval;

sendMessageDelayed(obtainMessage(MSG), delay);
}
}
}
};`


其实源码跟我们要写的代码都是差不多的只不过是他给我们做了一个封装而已,可以让我们减少很多代码量。

代码贴:

mAuthCodeTime = new AuthCodeTime(61 * 1000, 1000);
mAuthCodeTime.start();//开启倒计时
mAuth_code_bt.setFocusable(false);//设置 buuton 不可获取焦点和不可用
mAuth_code_bt.setEnabled(false);
class AuthCodeTime extends CountDownTimer {
/**
* @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 receive
*                          {@link #onTick(long)} callbacks.
*/
public AuthCodeTime(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onTick(long millisUntilFinished) {
mAuth_code_bt.setText(millisUntilFinished / 1000 + "s");
}

@Override
public void onFinish() {
mAuth_code_bt.setText("发送验证码");
mAuth_code_bt.setFocusable(true);
mAuth_code_bt.setEnabled(true);
}
}




Demo 地址

下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 验证码