【Android工具類】驗證碼倒計時幫助類CountDownButtonHelper的實現

ph44 9年前發布 | 5K 次閱讀 Java Android

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