我已成功实施秒表,但我没有得到两位数这样的正确毫秒mm:ss。 SS 02:54。 12 ,我的代码是< / p>
private Runnable updateTimerThread = new Runnable() {
public void run() {
timeMill=timeMill+100;
updateTime(timeMill);
stopWatchHandler.postDelayed(this, 100);
}
};
private void updateTime(long updatedTime) {
//I want to convert this updateTime to Milliseonds like two digit 23
}
我也试过这个final int mill = (int) (updatedTime % 1000);
,但这总是得到10分,20分,30分......但我想得到10,11,12,13 ......如果你有任何想法的话它帮助我。
答案 0 :(得分:3)
你正在增加100毫秒。你需要增加10ms并以10ms的延迟发布runnable。您可以使用SimpleDateFormat格式化long。
private Runnable updateTimerThread = new Runnable() {
public void run() {
timeMill += 10;
updateTime(timeMill);
stopWatchHandler.postDelayed(this, 10);
}
};
private void updateTime(long updatedTime) {
DateFormat format = new SimpleDateFormat("mm:ss.SS");
String displayTime = format.format(updatedTime);
// Do whatever with displayTime.
}
请注意,这取决于处理程序作为计时器的延迟时间。每次重复都会引入一个小错误。这些错误可能会随着时间的推移而增加,这对于秒表来说是不可取的。
我会存储秒表启动的时间,并计算每次更新后的经过时间:
startTime = System.nanoTime();
//Note nanoTime isn't affected by clock or timezone changes etc
private Runnable updateTimerThread = Runnable() {
public void run() {
long elapsedMiliseconds = (System.nanoTime() - startTime()) / 1000;
updateTime(elapsedMiliseconds);
stopWatchHandler.postDelayed(this, 10);
}
};
答案 1 :(得分:1)
timeMill=timeMill+100;
updateTime(timeMill/100);
stopWatchHandler.postDelayed(this, 10);
答案 2 :(得分:0)
使用stopWatchHandler.postDelayed(this,10);
答案 3 :(得分:0)
stopWatchHandler.postDelayed(this, 100);
timeMill=timeMill+100;
100ms = 0,1s
10ms = 0,01s
您每十分钟更新一次计时器。
答案 4 :(得分:0)
这是因为您在此代码stopwatch
中每十秒更新一次stopWatchHandler.postDelayed(this, 100);
,因此它类似于:0.1, 0.2, 0.3, ...
您应该将其更改为:
stopWatchHandler.postDelayed(this, 10);