Java 使用两个倒计时的Android
在我的应用程序中,我使用了两个不同的具有相同值的Java 使用两个倒计时的Android,java,android,timer,countdowntimer,Java,Android,Timer,Countdowntimer,在我的应用程序中,我使用了两个不同的具有相同值的倒计时程序。我有两个按钮来控制它们,但当我按下两次按钮时,它会从头开始。我想保留它的最后一个值 这是我的代码: t1 = new CountDownTimer(white, 1000) { @Override public void onTick(long l) { btnWhite.setText("seconds remaining: " + l / 1000); white = l; }
倒计时程序。我有两个按钮来控制它们,但当我按下两次按钮时,它会从头开始。我想保留它的最后一个值
这是我的代码:
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();
}
});
我已经查过你的密码了
这是显而易见的,因为您的计时器是用默认值初始化的。当您再次启动时,它不会接受新的白/黑值
要实现您想要的,您必须在启动计时器之前用新值初始化计时器
我已经对你的代码做了一些修改。你可以看看
制定两种方法
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();
}
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();
}
}
});
并像这样设置setOnClickListener
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();
}
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();
}
}
});
更新:
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();
}
});
请检查更新的代码并获取这些额外变量
boolean isRunning1 = false, isRunning2 = false;
希望这对你有帮助
快乐的编码。我已经测试过了,它可以工作了
我有两个TextView
s和两个按钮
s。黑色按钮位于黑色文本视图旁边,白色按钮位于白色文本视图旁边
首先,我声明重要的常量
//包含每个计时器的运行时间
长时间黑色经过=0,白色经过=0;
//包含启动新计时器的总时间
长全白=30000;
长总黑=30000;
接下来,我初始化倒计时程序
。不管你在这里放什么都没关系。我只有这样,计时器将初始化一些值。
原因是必须对它们进行初始化,以便以后在OnClickListener
s中能够.cancel()
它们
black=新的倒计时(totalWhite,1000){
@凌驾
公共空白条(长l){
}
@凌驾
公共无效onFinish(){
}
};
白色=新的倒计时(总黑色,1000){
@凌驾
公共空白条(长l){
}
@凌驾
公共无效onFinish(){
}
};
最后,OnClickListener
s用于按钮。(W
为白色文本视图,B
为黑色文本视图,B
为黑色按钮,W
为白色按钮)
w.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
黑色。取消();
//使用经过的时间启动新计时器
totalBlack=totalBlack-Black已过;
//这通过每毫秒滴答一次来保持毫秒
白色=新的倒计时(总黑色,1){
@凌驾
公共空白条(长l){
B.setText(l+);
blackappeased=totalBlack-l;//更新经过的时间
}
@凌驾
公共无效onFinish(){
}
}.start();
}
});
//我们对另一个玩家的按钮也做了类似的事情
b、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图){
白色。取消();
totalWhite=totalWhite-白色;
黑色=新的倒计时(全白色,1){
@凌驾
公共空白条(长l){
W.setText(l+);
whiteappeased=totalWhite-l;
}
@凌驾
公共无效onFinish(){
}
}.start();
}
});
这两个计时器的区别是什么?是按一个按钮两次,还是两个按钮都按一次,还是两个按钮都按两次?@KritixiLithos计时器相同,但工作时间可能不同。我正在尝试开发国际象棋时钟。我先按黑色按钮,然后按白色按钮,然后按黑色按钮。非常感谢,这很有帮助,但一个新的问题是我认为这段代码不能保持毫秒。例如,当我反复按这些按钮5秒钟时,计时器没有变化。就我而言,它工作正常。。我已经检查过了,直到两个计时器都没有结束。你能更具体地说明你的问题吗?因为我可能误解了你。很抱歉,我的问题是毫秒。例如,我启动两个定时器一次,我看到600599598等等。。然后我按下并等待了将近1秒钟(仍然是598秒,它还没有改变),然后我停止了它。但当我重新开始时,它必须被改变。我的意思是计时器没有保持毫秒。当我启动它时,它一次又一次地计数1000毫秒。对不起,英语不好。@CagriYalcin现在用什么?你说按钮不工作是什么意思?@CagriYalcin尝试交换++blacktimepassed
和++whitetimepassed
@CagriYalcin实际上还没有听我之前的建议,我在代码中犯了一个错误。再试一次now@CagriYalcin给我一些时间,我正在创建一个新项目进行测试this@CagriYalcin现在可以了!