2013-12-12 34 views
0

雖然onTick我如何增加計時器,嘗試了各種事情,但他們都只是開始一個新的計時器。我想隨着它的增加而增加它。Incrementing millisUntilFinished(Countdowntimer) - Android

剩餘時間:5秒

"on_Press_Some_Button();" 
millisUntilFinished+=2000 

剩餘時間:7秒

+0

你能解釋一下好嗎? 'CountDownTimer'沒有'onIncrement()'。這是一個「倒數」而不是「數」。如果你願意,你當然可以在'onTick()'中增加一些變量。否則,你可能想要使用其他東西,具體取決於你想要的東西。也許一個'while循環',增量變量,並停止當你想... – codeMagic

+0

'「on_Press_Some_Button」'我想'millisUntilFinished + = 3000' – Jtino

回答

0

我將基於包裝CountdownTimer本身而採用不同的方法。

public abstract class MyCountDownTimer { 

    private CountDownTimer cdt; 
    private long millisInFuture; 
    private long countDownInterval; 

    public MyCountDownTimer(long millisInFuture, long countDownInterval) { 
     this.millisInFuture = millisInFuture; 
     this.countDownInterval = countDownInterval; 

     recreateCounter(millisInFuture, countDownInterval); 
    } 

    public abstract void onFinish(); 

    public abstract void onTick(long millisUntilFinished); 

    public void start(){ 
     cdt.start(); 
    } 

    private void setMillisInFuture(long millisInFuture){ 
     this.millisInFuture = millisInFuture; 
    } 

    public void onIncrement(long millis){ 
     millisInFuture += millis; 
     recreateCounter(millisInFuture, countDownInterval); 
    } 

    private void recreateCounter(long millisInFuture, long countDownInterval){ 
     if(cdt != null){ 
      try { 
       cdt.cancel(); 
      } catch (Exception e) { 
      } 
     } 

     cdt = new CountDownTimer(millisInFuture, countDownInterval) { 

      @Override 
      public void onTick(long millisUntilFinished) { 
       setMillisInFuture(millisUntilFinished); 
       MyCountDownTimer.this.onTick(millisUntilFinished); 
      } 

      @Override 
      public void onFinish() { 
       MyCountDownTimer.this.onFinish(); 
      } 
     }; 
    } 
} 

希望它適合您的需求!

+0

感謝這個作品完美! – Jtino

+0

如果我沒有錯,上面有一些不完整的代碼,但是完成後它可以正常工作。 以下是onIncrement(long millis)的變化: public void onIncrement(long millis){milli_InFuture + = millis; recreateCounter(millisInFuture,countDownInterval);另外,用於cancel()的包裝方法將有助於: public void cancel(){ cdt.cancel(); } – binaryKarmic

0

,如果你需要一些事情發生每隔x米利斯,你可以使用TimerTask的這樣:

time = 0; 
    //Declare the timer 
    t = new Timer(); 
    //Set the schedule function and rate 
    t.scheduleAtFixedRate(new TimerTask() 
    { 

     @Override 
     public void run() 
     { 
      runOnUiThread(new Runnable() 
      { 

       @Override 
       public void run() 
       { 
          //do what u need to 
        } 

      }); 
     } 

    }, 
    //Set how long before to start calling the TimerTask (in milliseconds) 
    0, 
    //Set the amount of time between each execution (in milliseconds) 
    1000); 
0
CountDownTimer count = new CountDownTimer(1000000, 1000) { 
      public void onTick(long millisUntilFinished) { 

       // this will decrement 100 to 1 
       int seconds = (int) (millisUntilFinished/1000) % 100; 

       int minutes = (int) ((millisUntilFinished/(1000 * 60)) % 60); 
       int hours = (int) (((millisUntilFinished/(1000 * 60)) % 60))%60; 

       // this will increment 1 to 100 
       int incrementSeconds = 100 - seconds; 

      } 

      public void onFinish() { 
      } 
     }; 

     count.start();