在我的应用中,我使用了两个具有相同值的不同 CountDownTimers
。我有两个按钮来控制它们,但是当我按两次按钮时,它会从头开始。我想保留它的最后一个值。
这是我的代码:
t1 = new CountDownTimer(white, 1000) {
@Override
public void onTick(long l) {
btnWhite.setText("seconds remaining: " + l / 1000);
white = l;
}
@Override
public void onFinish() {
}
};
t2 = new CountDownTimer(black, 1000) {
@Override
public void onTick(long l) {
btnBlack.setText("seconds remaining: " + l / 1000);
black = l;
}
@Override
public void onFinish() {
}
};
btnBlack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
t1.start();
t2.cancel();
}
});
btnWhite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
t2.start();
t1.cancel();
}
});
最佳答案
我已经测试过了,它有效!
我有两个 TextView
和两个 Button
。黑色按钮位于黑色 TextView 旁边,白色按钮位于白色 TextView 旁边。
首先我声明了重要的常量。
//contains the elapsed time for each of the timers
long blackElapsed=0,whiteElapsed=0;
//contains the total time with which we start new timers
long totalWhite = 30000;
long totalBlack = 30000;
接下来我初始化 CountDownTimers
。无论你在这里放什么都没关系。我只有这个,以便计时器将被初始化为一些值。
原因是它们必须被初始化,以便稍后在 OnClickListener
中 .cancel()
它们。
black = new CountDownTimer(totalWhite, 1000){
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
}
};
white = new CountDownTimer(totalBlack, 1000){
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
}
};
最后是按钮的 OnClickListener
。 (W
是白色 textView,B
是黑色 textView,b
是黑色按钮,w
是白色按钮)
w.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
black.cancel();
//using the elapsed time to start a new timer
totalBlack = totalBlack - blackElapsed;
//this preserves milliseconds by ticking every millisecond
white = new CountDownTimer(totalBlack, 1){
@Override
public void onTick(long l) {
B.setText(l+"");
blackElapsed=totalBlack-l; //updating the elapsed time
}
@Override
public void onFinish() {
}
}.start();
}
});
//we do a similar thing with the other player's button
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
white.cancel();
totalWhite = totalWhite - whiteElapsed;
black = new CountDownTimer(totalWhite, 1){
@Override
public void onTick(long l) {
W.setText(l+"");
whiteElapsed=totalWhite-l;
}
@Override
public void onFinish() {
}
}.start();
}
});
关于java - Android 使用两个倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908611/