2012-08-12 91 views
3

我正在嘗試在我的一個應用程序中使用秒錶,並且我已經將它開始計算在開始時的秒數並在停止時停止計數。我的問題是它會在60秒後繼續運行。例如,如果我等了兩分鐘,我會得到120秒。格式秒錶要顯示00:00

所以我的問題是我該如何做到這一點,所以一旦秒達到60分鐘會增加一個秒會重新開始?

所以,而不是:120我會得到2:00。下面是我的代碼有:

final int MSG_START_TIMER = 0; 
final int MSG_STOP_TIMER = 1; 
final int MSG_UPDATE_TIMER = 2; 

Stopwatch timer = new Stopwatch(); 
final int REFRESH_RATE = 100; 

Handler mHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) { 
     super.handleMessage(msg); 
     switch (msg.what) { 
     case MSG_START_TIMER: 
      timer.start(); 
      mHandler.sendEmptyMessage(MSG_UPDATE_TIMER); 
      break; 

     case MSG_UPDATE_TIMER:    
      tvTextView.setText(":"+ timer.getElapsedTimeSecs());     
      mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
      break;         
     case MSG_STOP_TIMER: 
      mHandler.removeMessages(MSG_UPDATE_TIMER); 
      timer.stop(); 
      tvTextView.setText(""); 
      break; 

     default: 
      break; 
     } 
    } 
}; 

也:

public void start(View v) { 
    mHandler.sendEmptyMessage(MSG_START_TIMER); 
} 

public void stop(View v) { 
    mHandler.sendEmptyMessage(MSG_STOP_TIMER); 
} 

通過我看着this question但他的問題是與時間跨度,如果我理解正確的是從秒錶不同的方式(指正如果我錯了)。感謝您的時間和精力。

+0

問題,你提到那到是C#! – t0mm13b 2012-08-12 00:31:20

+0

看看這個問題 - http://stackoverflow.com/questions/5937043/problem-with-stopwatch-in-android?rq=1 – t0mm13b 2012-08-12 00:32:16

+0

爲什麼你把我的問題投下來?只是想知道,所以我可以改善未來的問題。 – ninge 2012-08-12 00:41:35

回答

6

如果您在幾秒鐘內開始時間:

display = String.format("%d:%02d", seconds/60, seconds % 60); 

如果你不想分鐘,如果它們是0:

if (seconds < 60) 
    display = String.format("%02d", seconds); 
else 
    display = String.format("%d:%02d", seconds/60, seconds % 60); 
+0

非常感謝很多訣竅! – ninge 2012-08-12 00:59:57

2

你只需要爲你創建一個字符串的函數。將此存儲在可到達的地方。

public String NumToStr(long i){ 
     if (i < 10) { 
      return ("0" + Long.toString(i)); 
     } 
     return Long.toString(i); 
    } 

這將需要任意數量小於10,給你用數字的「0」盈方的字符串。

即發送一個7並獲得「07」,然後發送一個55並獲得「55」,因爲它不小於10.最終發送它秒5並獲得「05」。現在添加字符串連接在一起,

Hour + ":" + Minute + ":" + Seconds; 

,你會得到「7時55分05秒」

下一個只是把一個

if (seconds > 60) { 
     seconds = 0 
     minutes++; 
    } 
    if (minutes > 60) { 
     minutes = 0 
     hours++; 
    } 
    if (hours > 12) { 
     hours = 0 
    } 

與所有的尊重,這是基本的東西。

迴應你應該在哪裏放置所有這些?你喜歡哪裏?但是你需要重做你的一些代碼。

 case MSG_UPDATE_TIMER: 
     long TimePassed; 
     TimePassed = Seconds; 
     if (Minutes > 0) { 
      TimePassed = TimePassed + (60 * Minutes); 
     } 
     if (Hours > 0) { 
      TimePassed = TimePassed + (60 * 60 * Hours); 
     } 

     Seconds = (timer.getElapsedTimeSecs()- TimePassed); 

     if (Seconds > 60) { 
      Seconds = 0 
      Minutes++; 
     } 
     if (Minutes > 60) { 
      Minutes = 0 
      hours++; 
     } 
     String timeSecs = NumToStr(Seconds); 
     String timeMins = NumToStr(Minutes); 
     String timeHours = NumToStr(Hours); 

     String Time = timeHours + ":" + timeMins + ":" + timeSecs; 

     tvTextView.setText(Time); 

     mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
     break; 
+0

我應該把這一切放在哪裏? – ninge 2012-08-12 00:40:11

+0

我爲你更新了我的答案。玩它。 – WIllJBD 2012-08-12 00:57:11

+0

太好了,謝謝你的努力。 – ninge 2012-08-12 00:57:52