歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 倒計時器

Android 倒計時器

日期:2017/3/1 10:06:27   编辑:Linux編程

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

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

完整源碼:

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