Android StopWatch:两位数的毫秒数

时间:2016-09-13 11:35:47

标签: android runnable stopwatch

我已成功实施秒表,但我没有得到两位数这样的正确毫秒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 ......如果你有任何想法的话它帮助我。

5 个答案:

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