我正在学习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);
}
});
}
}
答案 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);
}
});
}
这样,您可以更改处理程序触发的时间,但不会影响其他任何内容。