【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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!