歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 倒計時器

Android 中好像沒有提供類似的工具可以使用,這裡實現一個到計時器.提供兩個回調接口

  1. interface OnCountDownListener 
  2.     void OnCountDownTimeout();                            // 倒計時完成  
  3.     void onCountDownIntervalReach(int last);              // 倒計時時間時間間隔到達、用於過程中需要刷新的部分,last為已經過去多少時間  

完整源碼:

  1. package com.example.countdown; 
  2.  
  3. import java.lang.ref.WeakReference; 
  4.  
  5. import android.os.Handler; 
  6. import android.os.Message; 
  7.  
  8. public class CountDown { 
  9.      
  10.     private final static int TAG_COUNT_DOWN_INTERVAL_REACH = 0x100; 
  11.     private final static int TAG_COUNT_DOWN_TIMEOUT        = 0x101; 
  12.      
  13.     private int mTimeout; 
  14.     private int mInterval; 
  15.     private int mCount; 
  16.     private CountDownHandler    mHandler; 
  17.     private CountDownThread     mThread; 
  18.     private OnCountDownListener mListener; 
  19.     private boolean             mToQuit = false
  20.      
  21.     CountDown(int timeout, int interval){ 
  22.         mTimeout  = timeout; 
  23.         mInterval = interval <= 0 ? 10 : interval; 
  24.         mCount    = 0; 
  25.         mHandler  = new CountDownHandler(this); 
  26.     } 
  27.      
  28.     public void setOnCountDownListener(OnCountDownListener listener){ 
  29.         mListener = listener; 
  30.     } 
  31.      
  32.     public void start(){ 
  33.         mToQuit   = false
  34.         mCount    = 0; 
  35.         mThread   = new CountDownThread(); 
  36.         mThread.start(); 
  37.     } 
  38.      
  39.     public void stop(){ 
  40.         mToQuit   = true
  41.         if( mThread != null ) mThread.interrupt(); 
  42.     } 
  43.      
  44.     private static class CountDownHandler extends Handler 
  45.     { 
  46.         WeakReference<CountDown> mRef; 
  47.  
  48.         CountDownHandler(CountDown countdown){ 
  49.             mRef = new WeakReference<CountDown>(countdown); 
  50.         } 
  51.  
  52.         public void handleMessage(Message msg)   
  53.         {     
  54.             CountDown countDown = mRef.get(); 
  55.             switch (msg.what)   
  56.             {     
  57.             case TAG_COUNT_DOWN_INTERVAL_REACH: 
  58.                 if( countDown.mListener != null ) 
  59.                     countDown.mListener.onCountDownIntervalReach((Integer)msg.obj); 
  60.                 break
  61.             case TAG_COUNT_DOWN_TIMEOUT: 
  62.                 if( countDown.mListener != null ) 
  63.                     countDown.mListener.OnCountDownTimeout(); 
  64.                 break
  65.             default
  66.                 break
  67.             }     
  68.             super.handleMessage(msg);     
  69.         }     
  70.     } 
  71.      
  72.     private class CountDownThread extends Thread{ 
  73.         public void run() 
  74.         {     
  75.             while(  ! isInterrupted() ){ 
  76.                 try { 
  77.                     Thread.sleep(mInterval); 
  78.                     mCount++; 
  79.                      
  80.                     Message message = new Message();     
  81.                     if(  mCount * mInterval > mTimeout ){ 
  82.                         message.what = TAG_COUNT_DOWN_TIMEOUT; 
  83.                         mHandler.sendMessage(message); 
  84.                         break
  85.                     } 
  86.                      
  87.                     message.what = TAG_COUNT_DOWN_INTERVAL_REACH; 
  88.                     message.obj = mCount * mInterval; 
  89.                     mHandler.sendMessage(message); 
  90.                 } catch (InterruptedException e) { 
  91.                     e.printStackTrace(); 
  92.                     if( mToQuit ) break
  93.                 } 
  94.             } 
  95.         } 
  96.     } 
  97.      
  98.     interface OnCountDownListener{ 
  99.         void OnCountDownTimeout(); 
  100.         void onCountDownIntervalReach(int last); 
  101.     } 
Copyright © Linux教程網 All Rights Reserved