2013-10-05 49 views
3

我試圖使用計時器在我的Android應用程序中創建一個恢復按鈕。到目前爲止,我對恢復方法的代碼片段:Android的計時器恢復功能

private long pauseResume() { 

    long timeWhenStopped = chronometer.getBase() - SystemClock.elapsedRealtime(); 

    return timeWhenStopped; 

} 

而這裏的恢復按鈕的代碼:

public void onClick(View v) { 
     switch(v.getId()) { 

      ... 

      case R.id.resume_button:     
       chronometer.setBase(SystemClock.elapsedRealtime() + pauseResume()); 
       chronometer.start();  
       break; 

     } 
} 

問題是:例如,當我暫停計時器在00:05和然後在10秒後按下恢復按鈕,定時器將在00:15恢復計數。

我希望它從00:05開始,而不是00:15,因爲它是一個「簡歷」功能。

我很高興你能幫上忙。謝謝。

回答

0

天文鐘已用於實現一個簡單的計時器。您可以給它一個在elapsedRealtime()時基的開始時間,並從它開始計算,或者如果您不給它一個基準時間,它將使用時間你可以撥打start()

long timeWhenStopped = 0; 

更新變量的值,當你停止計時錶是這樣的:

timeWhenStopped = mChronometer.getBase() - SystemClock.elapsedRealtime(); 
mChronometer.stop(); 

我們也將使用這個變量開始之前調整計時錶:

mChronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped); 
mChronometer.start(); 

而且最後如果你有辦法重置你的天文鐘,那麼你應該記得重置timeWhenStopped變量。像這樣的:

mChronometer.setBase(SystemClock.elapsedRealtime()); 
timeWhenStopped = 0; 
+0

感謝您的答覆。但它做同樣的事情。 – banana

6

有點太晚了,但它可能會幫助別人。我認爲這是解決您的問題。

開始/恢復計時錶:

private void chronoStart() 
{ 
    // on first start 
    if (mLastStopTime == 0) 
     mChronometer.setBase(SystemClock.elapsedRealtime()); 
    // on resume after pause 
    else 
    { 
     long intervalOnPause = (SystemClock.elapsedRealtime() - mLastStopTime); 
     mChronometer.setBase(mChronometer.getBase() + intervalOnPause); 
    } 

    mChronometer.start(); 
} 

暫停計時錶:

private void chronoPause() 
{ 
    mChronometer.stop(); 

    mLastStopTime = SystemClock.elapsedRealtime(); 
} 

您需要記得去年天文臺表的停止時間

在簡歷上,您計算最後一次停留時間和新的開始時間之間的時間。當你有這個間隔時,你只需將時間間隔加到你的天文鐘基準時間(你「移動」原始開始時間)。

希望這有助於;)