2013-12-12 4 views
0

В то время как onTick, как я могу увеличить таймер, пробовал разные вещи, но все они просто запускают новый таймер. Я хочу увеличить его, пока он идет, например.Incrementing millisUntilFinished (Countdowntimer) - Android

Времени осталось: 5 сек

"on_Press_Some_Button();" 
millisUntilFinished+=2000 

Времени осталось: 7 сек

+0

Не могли бы вы немного объяснить? Нет 'onIncrement()' для 'CountDownTimer'. Это «счет вниз», а не «подсчет». Вы, конечно, можете увеличить некоторую переменную в 'onTick()', если хотите. В противном случае вы можете использовать что-то другое в зависимости от того, что вы хотите. Может быть, 'while loop', который увеличивает значение переменной и останавливается, когда вы хотите ... – codeMagic

+0

' 'on_Press_Some_Button" 'i want' millisUntilFinished + = 3000' – Jtino

ответ

0

I пойдет на другой подход, основанный на упаковке самого 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

Если я не ошибаюсь, есть неполный код выше, но после завершения работы он работает правильно. Ниже приводится изменение inInrement (long millis): public void onIncrement (long millis) { millisInFuture + = millis; recreateCounter (millisInFuture, countDownInterval); cdt.start() } Кроме того, метод обертка для отмены() поможет: общественности недействительным отменить() { cdt.cancel(); } – binaryKarmic

0

, если вам нужно что-то случиться с каждым х Миллис, вы могли бы использовать 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(); 
Смежные вопросы