1. 程式人生 > 程式設計 >Android Handler實現閃屏頁倒計時程式碼

Android Handler實現閃屏頁倒計時程式碼

我就廢話不多說了,大家還是直接看程式碼吧~

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實現閃屏頁倒計時程式碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。