Android 使用两个倒数计时器
Android using two countdowntimers
在我的应用中,我使用了两个具有相同值的不同 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();
}
});
我已经检查了你的代码。
这很明显,因为您的计时器已使用默认值初始化。当您重新开始时,它不会采用 white/black.
的新值
要实现您想要的效果,您必须在启动前用新值初始化计时器。
我已经对你的代码做了一些修正。你可以看看。
制作两种方法
public void timerStart1(long timeLengthMilli) {
t1 = new CountDownTimer(timeLengthMilli, 1000) {
@Override
public void onTick(long l) {
isRunning1 = true;
tv1.setText("seconds remaining: " + l / 1000);
white = l;
}
@Override
public void onFinish() {
isRunning1 = false;
}
}.start();
}
public void timerStart2(long timeLengthMilli) {
t2 = new CountDownTimer(timeLengthMilli, 1000) {
@Override
public void onTick(long l) {
isRunning2 = true;
tv2.setText("seconds remaining: " + l / 1000);
black = l;
}
@Override
public void onFinish() {
isRunning2 = false;
}
}.start();
}
并像这样设置 setOnClickListener
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!isRunning1) {
isRunning2 = false;
timerStart1(white);
if (t2 != null)
t2.cancel();
}
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!isRunning2) {
isRunning1 = false;
timerStart2(black);
if (t1 != null)
t1.cancel();
}
}
});
更新:
请检查更新的代码并使用这些额外的变量
boolean isRunning1 = false, isRunning2 = false;
希望对您有所帮助。
快乐编码。
我已经测试过了并且有效!
我有两个 TextView
和两个 Button
。黑色按钮在黑色文本视图旁边,白色按钮在白色文本视图旁边。
首先声明重要的常量。
//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();
}
});
在我的应用中,我使用了两个具有相同值的不同 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();
}
});
我已经检查了你的代码。
这很明显,因为您的计时器已使用默认值初始化。当您重新开始时,它不会采用 white/black.
的新值要实现您想要的效果,您必须在启动前用新值初始化计时器。
我已经对你的代码做了一些修正。你可以看看。
制作两种方法
public void timerStart1(long timeLengthMilli) {
t1 = new CountDownTimer(timeLengthMilli, 1000) {
@Override
public void onTick(long l) {
isRunning1 = true;
tv1.setText("seconds remaining: " + l / 1000);
white = l;
}
@Override
public void onFinish() {
isRunning1 = false;
}
}.start();
}
public void timerStart2(long timeLengthMilli) {
t2 = new CountDownTimer(timeLengthMilli, 1000) {
@Override
public void onTick(long l) {
isRunning2 = true;
tv2.setText("seconds remaining: " + l / 1000);
black = l;
}
@Override
public void onFinish() {
isRunning2 = false;
}
}.start();
}
并像这样设置 setOnClickListener
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!isRunning1) {
isRunning2 = false;
timerStart1(white);
if (t2 != null)
t2.cancel();
}
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!isRunning2) {
isRunning1 = false;
timerStart2(black);
if (t1 != null)
t1.cancel();
}
}
});
更新:
请检查更新的代码并使用这些额外的变量
boolean isRunning1 = false, isRunning2 = false;
希望对您有所帮助。
快乐编码。
我已经测试过了并且有效!
我有两个 TextView
和两个 Button
。黑色按钮在黑色文本视图旁边,白色按钮在白色文本视图旁边。
首先声明重要的常量。
//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();
}
});