Android 簡單實現(xiàn)倒計時功能
在 Android 中倒計時功能是比較常用的一個功能,比如短信驗證碼,付款倒計時等。實現(xiàn)方式有Handler、Thread 等,但是實現(xiàn)起來都有點麻煩,其實Android已經(jīng)為我們封裝好了一個抽象類 CountDownTimer,可以簡單的實現(xiàn)倒計時功能,如下圖所示。

CountDownTimer 實現(xiàn)倒計時功能的機制也是用Handler 消息控制,只是它幫我們已經(jīng)封裝好了,先看一下它的介紹。
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();
大致意思是,設(shè)置一個倒計時,直到完成這個時間段的計時,并會實時更新時間的變化,最后舉了一個30秒倒計時的例子,如下:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
詳解
可以看到,上面示例中構(gòu)造方法需要傳入兩個參數(shù),如下:
/**
* @param millisInFuture The number of millis in the future from the call to start()
* until the countdown is done and onFinish() is called.
* @param countDownInterval The interval along the way to receive onTick(long) callbacks.
*/
public CountDownTimer(long millisInFuture, long countDownInterval) {
mMillisInFuture = millisInFuture;
mCountdownInterval = countDownInterval;
}
第一個參數(shù)是倒計時的總時間,第二個參數(shù)是倒計時的時間間隔(每隔多久執(zhí)行一次),注意這里傳入的兩個時間參數(shù)的單位都是毫秒。
它提供的幾個方法也很簡單,如下:

- start():開始倒計時。
- cancel():取消倒計時。
- onFinish():倒計時完成后回調(diào)。
- onTick(long millisUnitilFinished):當前任務(wù)每完成一次倒計時間隔時間時回調(diào)。
驗證碼示例
短信驗證碼倒計時原理很簡單,也就是點擊獲取驗證碼開啟倒計時,在倒計時內(nèi)不可點擊,倒計時結(jié)束后方可重新獲取,如下所示:
new CountDownTimer(millisUntilFinished, 1000) {
/**
* 當前任務(wù)每完成一次倒計時間隔時間時回調(diào)
* @param millisUntilFinished
*/
public void onTick(long millisUntilFinished) {
if (btn_Code != null) {
//按鈕不可用
btn_Code.setClickable(false);
btn_Code.setEnabled(false);
btn_Code.setText(millisUntilFinished / 1000 + "s");
}
}
/**
* 倒計時完成后回調(diào)
*/
public void onFinish() {
if (btn_Code != null) {
//按鈕可用
btn_Code.setText("重新獲取");
btn_Code.setClickable(true);
btn_Code.setEnabled(true);
}
//取消倒計時
cancel();
}
}.start();
注:在Activity或Fragment銷毀的時候記得調(diào)用 cancle() 方法,否則它的 onTick() 方法還會繼續(xù)執(zhí)行,容易造成內(nèi)存泄漏。
總結(jié)
以上所述是小編給大家介紹的Android 簡單實現(xiàn)倒計時功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
Android自定義view實現(xiàn)水波紋進度球效果
在我們的日常開發(fā)中自定義控件還是用的挺多的,設(shè)計師或者產(chǎn)品為了更好的漂亮,美觀,交互都會做一些牛逼的ui效果圖,但是最后實現(xiàn)的還是我們程序員啊。所以說 自定義view你還是得會的。2016-08-08
Android Studio 3.0 新功能全面解析和舊項目適配問題
Android Studio是Android的官方IDE。接下來通過本文給大家分享Android Studio 3.0 新功能全面解析和舊項目適配問題,需要的朋友可以參考下2017-11-11
Android開發(fā)入門環(huán)境快速搭建實戰(zhàn)教程
最近想重新學(xué)習(xí)下Android,學(xué)習(xí)之前開發(fā)環(huán)境的搭建是個首先要解決的問題,所以下面這篇文章主要給大家介紹了Android開發(fā)環(huán)境搭建的相關(guān)資料,文中將實現(xiàn)的步驟一步步介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
Android系統(tǒng)進程間通信(IPC)機制Binder中的Server和Client獲得Service Manager接
本文主要介紹Android IPC通信Binder中的Server和Client獲得Service Manager接口,這里詳細的說明了如何實現(xiàn)Service Manager接口,對研究Android源碼的朋友提供幫助,有需要的小伙伴可以參考下2016-08-08
Android基于ListView實現(xiàn)類似Market分頁加載效果示例
這篇文章主要介紹了Android基于ListView實現(xiàn)類似Market分頁加載效果,結(jié)合完整實例形式分析了ListView的OnScroll方法來實現(xiàn)分頁與滾動加載的操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-10-10
Android中SharedPreference使用實例講解
這篇文章主要介紹了Android中SharedPreference使用方法,實現(xiàn)登陸界面記住密碼功能,感興趣的小伙伴們可以參考一下2016-01-01
Android程序開發(fā)之ListView 與PopupWindow實現(xiàn)從左向右滑動刪除功能
這篇文章主要介紹了Android程序開發(fā)之ListView 與PopupWindow實現(xiàn)滑動刪除功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07

