2015-07-05 41 views
0

我想創建一個倒計時器,按下按鈕後將增加其速度我還使用計數器來調整進度條。倒數計時器,按下按鈕後提高速度

現在我正在調整按鈕按下後的速度(增加),但它不是從頭開始。例如,當我開始我的程序時,定時器從頭開始遞減,這很好。然而,當我按下按鈕計數器不從這樣的起點開始: enter image description here enter image description here enter image description here

我想這只是爲了每個按鈕按下後跑得更快,不降低長。

這是我的代碼:

mTrueBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //is the user right? if pressing True button 
      if(isMathProblemTrue == 1){ 
       //user is correct 
       Toast.makeText(MainActivity.this,"Correct!",Toast.LENGTH_SHORT).show(); 
       generateMathProblem(); 
       timer_length *= 0.8; 
       timer_interval *= 0.8; 
       Log.d(TAG,"time length:"+timer_length); 
       Log.d(TAG,"time interval:"+timer_interval); 
       mCountDownTimer.cancel(); 
       createNStartTimer(); 
       //restartTimer(); 
      }else{ 
       //user is incorrect 
       transferUserToStartScreen(); 
       //reset the timer 
       mCountDownTimer.cancel(); // cancel 
      } 
     } 
    }); 
private void createNStartTimer() { 
    mCountDownTimer = new CountDownTimer(timer_length,timer_interval) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      Log.d(TAG,"Mil until finish:"+millisUntilFinished); 
      int progress = (int) (millisUntilFinished/100); 
      mProgressBar.setProgress(progress); 
     } 
     @Override 
     public void onFinish() { 
      mProgressBar.setProgress(0); 
      transferUserToStartScreen(); 
     } 
    }.start(); 
} 

回答

1

創建功能外2個全局常量

int totalMillisUntilFinished = 0; 
bool firstTime = true; 

我們初始化totalMillisUntilFinishedonTick被調用的時候,所以更新您的onTick功能:

private void createNStartTimer() { 
    firstTime = true; 
    mCountDownTimer = new CountDownTimer(timer_length,timer_interval) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      if(firstTime){totalMillisUntilFinished = millisUntilFinished; firstTime = false;} 
      Log.d(TAG,"Mil until finish:"+millisUntilFinished); 
      int progress = (int) (millisUntilFinished*100/totalMillisUntilFinished); 
      mProgressBar.setProgress(progress); 
     } 

我個人使用HandlersRunnable s,我肯定會建議尋找代替。

+0

謝謝您的建議。我認爲你的意思是將布爾值初始化爲真,因爲它給了我算術異常除以0.無論如何,我嘗試過這樣做,但它不會從按鈕按下後從頭開始:/ –

+0

我的appologies,我忘了設置'firstTime '一旦你創建一個新的定時器爲真。試試這個呢? –

+0

沒問題。我已經這樣做了,現在計時器在每次按下後都會繼續運行,只有一小部分我能看到的進度條增加。 –