计时工具类


public class DownTimer {
   private long totalTime = -1;
   private long intervalTime = 0;
   private long remainTime;
   private long systemAddTotalTime;
   private static final int TIME = 1;
   private TimeListener listener;
   private long curReminTime;
   private boolean isPause = false;
   private boolean isRuning = false;

   public DownTimer() {
   }

   public void setIntervalTime(long intervalTime) {
       this.intervalTime = intervalTime;
   }

   public void setTotalTime(long totalTime) {
       this.totalTime = totalTime;
   }

   public long getIntervalTime() {
       return intervalTime;
   }

   public long getTotalTime() {
       return totalTime;
   }

   public void start() {
       if (totalTime <= 0 && intervalTime <= 0) {
          return;
       }

       isRuning = true;
       systemAddTotalTime = SystemClock.elapsedRealtime() + totalTime;

       if (null != mHandler)
           mHandler.sendEmptyMessage(TIME);
   }

   public void cancel() {
       if(mHandler !=null)
       {
           isRuning = false;
           mHandler.removeMessages(TIME);
           mHandler = null;
       }

   }

   public void pause() {
       if(mHandler !=null && isRuning)
       {
           mHandler.removeMessages(TIME);
           isPause = true;
           curReminTime = remainTime;
       }

   }

   public void resume() {
       if (isPause == true && isRuning) {
           isPause = false;
           totalTime = curReminTime;
           start();
       }

   }

   private Handler mHandler = new Handler() {

       @Override
       public void handleMessage(Message msg) {
           switch (msg.what) {
               case TIME:
                   if (!isPause)
                       soloveTime();
                   break;
               case 2:
                   isPause = true;
                   break;
               default:
                   break;
           }
       }
   };


   private void soloveTime() {
       remainTime = systemAddTotalTime - SystemClock.elapsedRealtime();
       if (remainTime <= 0) {
           if (listener != null) {
               listener.onFinish();
               cancel();
           }
       } else if (remainTime < intervalTime) {
           if (null != mHandler)
               mHandler.sendEmptyMessageDelayed(TIME, remainTime);
       } else {
           long curSystemTime = SystemClock.elapsedRealtime();
           if (listener != null) {
               listener.onInterval(remainTime);
           }

           long delay = curSystemTime + intervalTime - SystemClock.elapsedRealtime();

           while (delay < 0) delay += intervalTime;

           if (null != mHandler) {
               mHandler.sendEmptyMessageDelayed(TIME, delay);
           }
       }
   }

   public interface TimeListener {
       public void onFinish();
       public void onInterval(long remainTime);
   }

   public void setTimerLiener(TimeListener listener) {
       this.listener = listener;
   }

}

 使用:

   mTimer = new DownTimer();
        mTimer.setIntervalTime(1000);//设置间隔数
        mTimer.setTimerLiener(new DownTimer.TimeListener() {

            @Override
            public void onFinish() {
                mTxt_time.setText("恭喜你已完成学习!");

              
            }

            @Override
            public void onInterval(long remainTime) {
                String minuteSur = "";
                String secondSur = "";
                long minute = remainTime / 60000;
                long seconds = remainTime % 60000;
                long second = Math.round((float) seconds / 1000);
                if (minute < 10) {
                    minuteSur += "0";
                }
                minuteSur += minute;
                if (second < 10) {
                    secondSur += "0";
                }
                secondSur += second;

                mTxt_time.setText("还需 " + minuteSur + " 分钟 " + secondSur + " 秒可完成学习啦,加油!");
           

            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值