Android 秒表:两位数的毫秒数
Android StopWatch : Milliseconds with two digit
我已经成功地实现了秒表,但是我没有得到像这样的两位数的正确毫秒数 mm:ss.SS 02:54.12,我的密码是
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..等等,如果你有的话关于它的想法请帮助我。
您正在递增 100 毫秒。您需要增加 10 毫秒和 post 可运行的延迟 10 毫秒。您可以使用 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.
}
注意这里依赖于Handler作为定时器的延迟时间。每次重复都会引入一个微小的错误。随着时间的推移,这些错误可能会累积起来,这对于秒表来说是不可取的。
我会存储秒表启动的时间,并根据每次更新计算经过的时间:
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);
}
};
使用 stopWatchHandler.postDelayed(this, 10);
stopWatchHandler.postDelayed(this, 100);
timeMill=timeMill+100;
100ms = 0,1s
10ms = 0,01s
您每十分之一秒更新一次计时器。
timeMill=timeMill+100;
updateTime(timeMill/100);
stopWatchHandler.postDelayed(this, 10);
这是因为您在此代码 stopWatchHandler.postDelayed(this, 100);
中每隔 10 秒更新一次 stopwatch
,因此计算如下:0.1, 0.2, 0.3, ...
您应该将其更改为:
stopWatchHandler.postDelayed(this, 10);
我已经成功地实现了秒表,但是我没有得到像这样的两位数的正确毫秒数 mm:ss.SS 02:54.12,我的密码是
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..等等,如果你有的话关于它的想法请帮助我。
您正在递增 100 毫秒。您需要增加 10 毫秒和 post 可运行的延迟 10 毫秒。您可以使用 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.
}
注意这里依赖于Handler作为定时器的延迟时间。每次重复都会引入一个微小的错误。随着时间的推移,这些错误可能会累积起来,这对于秒表来说是不可取的。
我会存储秒表启动的时间,并根据每次更新计算经过的时间:
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);
}
};
使用 stopWatchHandler.postDelayed(this, 10);
stopWatchHandler.postDelayed(this, 100);
timeMill=timeMill+100;
100ms = 0,1s
10ms = 0,01s
您每十分之一秒更新一次计时器。
timeMill=timeMill+100;
updateTime(timeMill/100);
stopWatchHandler.postDelayed(this, 10);
这是因为您在此代码 stopWatchHandler.postDelayed(this, 100);
中每隔 10 秒更新一次 stopwatch
,因此计算如下:0.1, 0.2, 0.3, ...
您应该将其更改为:
stopWatchHandler.postDelayed(this, 10);