我如何在此代码中添加miliseconds选项?

时间:2018-01-24 12:00:37

标签: android

我正在学习android。我从我的参考书中制作了这个秒表应用程序。它只显示小时:分钟:秒但是我想在秒内添加毫秒。我会这样做。

代码:: -

public class StopWatchActivity extends AppCompatActivity {

int seconds;
boolean running;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_stop_watch);
    runTimer();
}

public void startTimer(View view){
    running = true;
}

public void stopTimer(View view){
        running = false;
    }

public void resetTimer(View view){
        running = true;
        seconds = 0;
    }

public void runTimer(){
    final TextView textView = (TextView) findViewById(R.id.timer);
    final Handler handler = new Handler();
    handler.post(new Runnable() {
        @Override
        public void run() {
                int hours = seconds / 3600;
                int minutes = (seconds % 3600) / 60;
                int sec = seconds % 60;
                String time = String.format("%d:%02d:%02d", hours, 
minutes,sec);
                textView.setText(time);
            if(running) {
                seconds++;
            }
            handler.postDelayed(this, 1000);
        }
    });

}
}

2 个答案:

答案 0 :(得分:1)

第一步是将字段seconds更改为milliSeconds,因为您希望跟踪该TimeUnit。

当使用handler.postDelayed(this, 1000);重新启动处理程序时,定义1毫秒作为延迟而不是1000(= 1秒),如此handler.postDelayed(this, 1);,那么您只需要调整计算并完成: - )

答案 1 :(得分:0)

更简单的解决方案是: 不要在活动中保存经过的秒数,而是保存计时器启动的时间(例如startTime

然后,在你的处理程序的runnable中,获取当前时间并减去开始时间以找到经过的时间。

伪代码:

long startTimeNanos

public void runTimer() {

    startTime = new Date()
    final Handler handler = new Handler();
    handler.post(new Runnable() {
        @Override
        public void run() {

            long currentTime = System.nanoTime()
            long elapsedNanos = currentTime - startTimeNanos

            // calculate seconds and millis
            // and set the textview text

            handler.postDelayed(this, 1000);
        }
    });
}

这样,您可以更改处理程序触发的时间,但不会影响其他任何内容。