【Android工具類】驗證碼倒計時幫助類CountDownButtonHelper的實現
轉載請注明出處: http://blog.csdn.net/zhaokaiqiang1992
我們在做有關短信驗證碼功能的時候,為了防止用戶無休止的獲取短信驗證碼,或者是誤操作,造成驗證碼混亂的情況,我們一般在獲取驗證碼功能的Button上面加上倒計時功能,從而限制用戶獲取驗證碼的間隔。
今天這篇文章,是介紹如何使用CountDowmTimer實現驗證碼的倒計時功能的。
先看效果圖
CountDownTimer是一個系統提供的一個關于倒計數的類,我們可以設置倒計時的總時間,還有倒計時的間隔,這樣每過一段固定時間,我們就可以在回調函數中進行我們的操作。下面是CountDownTimer類的回調方法和構造函數。
CountDownTimer timer = new CountDownTimer(AllTime,Intevel) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
}
}; </pre>
new CountDownTimer(AllTime,Intevel)
第一個參數是總時間,第二個是倒計時間隔。
onTick()是倒計時到了間隔時間之后的回調函數。
onFinish()是計時結束之后調用的函數。
下面,給出我的倒計時幫助類。
package com.example.countdowntimerdemo;
import android.os.CountDownTimer;
import android.util.Log;
import android.widget.Button;
/**
* 倒計時Button幫助類
*
* @author zhaokaiqiang
* @see http://blog.csdn.net/zhaokaiqiang1992
*/
public class CountDownButtonHelper {
// 倒計時timer
private CountDownTimer countDownTimer;
// 計時結束的回調接口
private OnFinishListener listener;
private Button button;
/**
*
* @param button
* 需要顯示倒計時的Button
* @param defaultString
* 默認顯示的字符串
* @param max
* 需要進行倒計時的最大值,單位是秒
* @param interval
* 倒計時的間隔,單位是秒
*/
public CountDownButtonHelper(final Button button,
final String defaultString, int max, int interval) {
this.button = button;
// 由于CountDownTimer并不是準確計時,在onTick方法調用的時候,time會有1-10ms左右的誤差,這會導致最后一秒不會調用onTick()
// 因此,設置間隔的時候,默認減去了10ms,從而減去誤差。
// 經過以上的微調,最后一秒的顯示時間會由于10ms延遲的積累,導致顯示時間比1s長max*10ms的時間,其他時間的顯示正常,總時間正常
countDownTimer = new CountDownTimer(max * 1000, interval * 1000 - 10) {
@Override
public void onTick(long time) {
// 第一次調用會有1-10ms的誤差,因此需要+15ms,防止第一個數不顯示,第二個數顯示2s
button.setText(defaultString + "(" + ((time + 15) / 1000)
+ "秒)");
Log.d("CountDownButtonHelper", "time = " + (time) + " text = "
+ ((time + 15) / 1000));
}
@Override
public void onFinish() {
button.setEnabled(true);
button.setText(defaultString);
if (listener != null) {
listener.finish();
}
}
};
}
/**
* 開始倒計時
*/
public void start() {
button.setEnabled(false);
countDownTimer.start();
}
/**
* 設置倒計時結束的監聽器
*
* @param listener
*/
public void setOnFinishListener(OnFinishListener listener) {
this.listener = listener;
}
/**
* 計時結束的回調接口
*
* @author zhaokaiqiang
*
*/
public interface OnFinishListener {
public void finish();
}
} </pre>
測試源代碼下載地址,請關注我的github
https://github.com/ZhaoKaiQiang/CountDownTimerDemo
本文由用戶 ph44 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!