我正处于足球比赛计时器项目的中间。基本上,我正在寻找一个计时器的实现,该计时器在按下"START 1st half"
按钮后开始,计数到45分钟,而不是暂停,我们可以再次启动它"START 2nd half"
(它会是相同的按钮,但它的文本将通过整个匹配更改)。然后它会从45分钟到90分钟。
我一直在尝试使用Handler()
,Runnable()
和onClickListener()
完成此操作,但它对我来说根本不起作用:(你能不能给我关于如何解决这个问题的一些建议?
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
showTimeRemaining();
timerHandler.postDelayed(this, 500);
}
};
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v;
startButton(v);
if (b.getText().equals("Mecz trwa")) {
timerHandler.removeCallbacks(timerRunnable);
b.setEnabled(true);
} else {
startTime = System.currentTimeMillis();
timerHandler.postDelayed(timerRunnable, 0);
b.setText("Mecz trwa");
b.setEnabled(false);
}
}
});
public void showTimeRemaining() {
long millis = System.currentTimeMillis() - startTime;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
timerTextView = (TextView) findViewById(R.id.time);
timerTextView.setText(String.format("%d:%02d", minutes, seconds));
}
答案 0 :(得分:0)
我建议尝试使用CountDownTimer。
请参阅此处了解文档和用法:
https://developer.android.com/reference/android/os/CountDownTimer.html
答案 1 :(得分:0)
以下是我的一些建议。
首先,将您的Handler
封装到名为Timer
的类中。这样操作定时器就更容易了。这是我的版本:
导入android.os.Handler;
public class Timer {
private Handler handler;
private boolean paused;
private int interval;
private Runnable task = new Runnable () {
@Override
public void run() {
if (!paused) {
runnable.run ();
Timer.this.handler.postDelayed (this, interval);
}
}
};
private Runnable runnable;
public int getInterval() {
return interval;
}
public void setInterval(int interval) {
this.interval = interval;
}
public void startTimer () {
paused = false;
handler.postDelayed (task, interval);
}
public void stopTimer () {
paused = true;
}
public Timer (Runnable runnable, int interval, boolean started) {
handler = new Handler ();
this.runnable = runnable;
this.interval = interval;
if (started)
startTimer ();
}
}
其次,请勿使用System.currenTimeMillis
。使用更易操作的东西。创建一个自己的变量,用于存储剩余的秒数:
private int secondsLeft = 60 * 45;
您每秒递减此变量,直到它达到零。然后,您停止计时器,更改按钮的文本或其他任何内容。应将此逻辑放入用于处理程序的Runnable
。