我想暫停計時器,點擊按鈕後我想繼續chromoneter計數...我搜索但不能與此功能相關..怎麼辦?Android_Chronometer pause
29
A
回答
110
你是要去需要,保持跟蹤已經過去了,因爲該天文臺開始的時間變量:
long timeWhenStopped = 0;
更新變量的值,當你停止這樣的記時計:
timeWhenStopped = mChronometer.getBase() - SystemClock.elapsedRealtime();
mChronometer.stop();
我們也將使用這個變量開始之前調整計時錶:
mChronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
mChronometer.start();
最後如果你有辦法重置你的天文鐘,那麼你應該記得重置timeWhenStopped變量。類似這樣的:
mChronometer.setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
9
我爲此做了一個PauseableChronometer
班。
import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Chronometer;
public class PausableChronometer extends Chronometer {
private long timeWhenStopped = 0;
public PausableChronometer(Context context) {
super(context);
}
public PausableChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PausableChronometer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void start() {
setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
super.start();
}
@Override
public void stop() {
super.stop();
timeWhenStopped = getBase() - SystemClock.elapsedRealtime();
}
public void reset() {
stop();
setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
}
public long getCurrentTime() {
return timeWhenStopped;
}
public void setCurrentTime(long time) {
timeWhenStopped = time;
setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
}
}
3
兩個其他的答案是相同的,而天文臺的顯示屏上工作得非常好,但他們有一個缺陷:timeWhenStopped
,以及由getCurrentTime()
返回的值是負的。
這裏是我的建議,底座上這兩個答案:
public class PausableChronometer extends Chronometer {
private long timeWhenStopped = 0;
public PausableChronometer(Context context) {
super(context);
}
public PausableChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PausableChronometer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void start() {
setBase(SystemClock.elapsedRealtime() - timeWhenStopped);
super.start();
}
@Override
public void stop() {
super.stop();
timeWhenStopped = SystemClock.elapsedRealtime() - getBase();
}
public void reset() {
stop();
setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
}
public long getCurrentTime() {
return timeWhenStopped;
}
public void setCurrentTime(long time) {
timeWhenStopped = time;
setBase(SystemClock.elapsedRealtime() - timeWhenStopped);
}
}
你得明白SystemClock.elapsedRealtime()
爲指標,對「現在」。因此,當我們(重新)啓動時計時,我們將在過去設置基地N
秒,N
是計時器的當前值(在第一次啓動的情況下爲0)。 類似地,當停止計時器時,計時器顯示的時間是先前設置的基準(getBase()
)和現在(SystemClock.elapsedRealtime()
)之間的時間間隔,因此爲減法。
相關問題
- 1. Pause CCAction cocos2d
- 2. Flappy bird pause
- 3. setInterval(play-pause)mouseenter
- 4. Pause TableView滾動
- 5. JLabel on JPanel pause
- 6. jquery onscreen run offscreen pause
- 7. Ball Bouncing off Walls - Pause&Resume
- 8. 這個NSTimer Pause/Resume如何工作?
- 9. Jquery Cycle - 'next','prev',&pause actions reset autostop&autostopCount?
- 10. 對消費者的node-kafka pause()方法。任何工作版本?
- 11. 容器「gcr.io/google_containers/pause:0.8.0」中的過程有什麼功能?
- 12. 對於Thread類型,方法pause()未定義?
- 13. Android MediaPlayer pause()停止播放器並重新開始
- 14. 爲什麼我的CPAN分佈沒有被PAUSE索引?
- 15. 獲取按鈕(prev,next,pause)爲Deck.js工作
- 16. asm(「pause」)做什麼以及爲什麼要使用它
- 17. C++中的Pause(),Sleep()和Wait()之間的區別是什麼?
- 18. cmd:@pause和路徑的意外錯誤> txt
- 19. 使用Powershell自動執行以PAUSE結尾的BAT文件
- 20. webkit mediagroup在Chrome中調用.pause()時尋求結束
- 21. 與MediaPlayer類中的pause()函數相比,stop()函數的好處是什麼?
- 22. pause()系統調用的系統調用處理函數在哪裏?
- 23. 如何解決從Win32上傳到PAUSE(CPAN)模塊的「世界可寫」問題?
- 24. 將命令行日誌重定向到文件時出現`pause`命令問題
- 25. 即使腳本中存在「PAUSE」,運行腳本後仍會關閉命令窗口
- 26. 在C#控制檯應用程序中,Pause鍵會凍結顯示輸出。我可以禁用嗎?
- 27. 如果showDialog的活動被調用會發生什麼?如果是,活動是否會打電話給Pause爲什麼?
- 28. 如何暫停和恢復GameLoop?
- 29. Javascript正則表達式匹配並從字符串中獲取值
- 30. Arrayindex越界來當崩潰我米使用expandble列表視圖,並使用expand.collapse但其投擲ANS exception- Arrayindexoutofbound倒塌它expandble列表組
精彩回答:) – 2011-08-25 09:40:26
很好的答案...與良好的描述..! 它應該被接受爲答案.. @ andveand如果它工作..! – 2012-04-02 05:53:13
爲什麼這不是公認的答案?適合我,謝謝! – jamesc 2012-06-13 16:16:45