2012-08-12 57 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