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);