我正在尝试在我的某个应用程序中使用秒表,并且我已经将它用于开始计算秒数并停止计数停止的位置。我的问题是它会在60秒后继续运行。例如,如果我等了两分钟,我会得到120秒。
所以我的问题是 如何才能实现这一点,一旦秒数达到60分钟,分钟数将增加1秒,秒数将重新开始?
所以不是:120我会得到2点。这是我的代码:
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,但他的问题出在TimeSpan上,如果我理解正确的话与秒表不同(如果我错了,请纠正我)。感谢您的时间和精力。
答案 0 :(得分:7)
如果以秒为单位开始时间:
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);
答案 1 :(得分: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;
你会得到“07: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;