我就廢話不多說了,大家還是直接看代碼吧~
package com.zjx.todayinfomation;
import android.os.Handler;
public class CustomCountDownTimer implements Runnable{
// 1.實時去回調 這個時候是什么時間 倒計時到幾點 觀察者設計模式
// 2.支持傳入總時間 動態傳入
// 3.每過一秒 總秒數 -1
// 4.總時間倒計時為0時候 回調完成狀態
private int time; // 總時間
private int countDowntime; // 倒計時事件
private IcountDownHandler countDownHandler; // 回調接口
private final Handler handler; // handler
private boolean isRunning; // 是否允許
/**
* @param time 傳入的總時間
* @param countDownHandler 接口回調
*/
public CustomCountDownTimer(int time,IcountDownHandler countDownHandler){
handler = new Handler();
this.time = time;
this.countDowntime = time; // 倒計時時間第一次 就是總時間
this.countDownHandler = countDownHandler;
}
@Override
public void run() {
if (isRunning){ // 如果開啟了
if (countDownHandler != null){ // 并且回調接口不為空 回調當前秒數
countDownHandler.onTicker(countDowntime); // countDowntime 第一次進來就是總時間 比如5
}
// 如果當前秒數為0 回調完成
if (countDowntime == 0){
cancel();
if (countDownHandler != null){
countDownHandler.onFinish();
}
}else{
// 如果當前秒數部位0 每次 減少1秒 并且 疫苗后 重新執行這個run方法
countDowntime = time--; // 5 4 3 2 1 類似
handler.postDelayed(this,1000);
}
}
}
/**
* 開啟run方法
*/
public void start(){
isRunning = true;
handler.post(this); // 調用run方法
}
/**
* 跳出循環 終止run方法
*/
public void cancel(){
isRunning = false;
handler.removeCallbacks(this);
}
/**
* 觀察者 回調接口
*/
public interface IcountDownHandler{
void onTicker(int time);// 回調事件 倒計時
void onFinish(); // 回調完成
}
}
補充知識:android 列表每一個item都加上倒計時
使用recyclerview的問題:當前顯示的view如果滑到看不見再滑回來就會重新倒計時
解決方法是換用listview 使用viewholder復用原理 把倒計時寫在第一次加載時候 這樣就不會出現上述問題
以上這篇Android Handler實現閃屏頁倒計時代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。