我正在尝试实现像Simon Says for Android这样的东西。这是我的代码:
for(int i = 1; i <= sequence.size(); i++){
handler.postDelayed(new Runnable(){
public void run(){
if (sequence.peek() == 1){
green.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
green.setPressed(false);
}
}, 1000);
}
else if (sequence.peek() == 2){
red.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
red.setPressed(false);
}
}, 1000);
}
else if (sequence.peek() == 3){
yellow.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
yellow.setPressed(false);
}
}, 1000);
}
else if (sequence.peek() == 3){
blue.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
blue.setPressed(false);
}
}, 1000);
}
int myNum = sequence.peek();
sequence.poll();
sequence.add(myNum);
}
}, 1000);
}
}
基本上,我有一个队列(序列),它保持模式闪烁按钮颜色。 (setPressed(true)是与setPressed(false)不同的颜色) 第一次调用它时,只有一个按钮需要更改颜色才能正常工作。第二次调用它时,2个按钮颜色应该改变。我的代码现在将同时点亮。 如何制作它以使它首先闪烁一个按钮颜色,完成它,然后闪烁第二个按钮颜色? 我已经尝试了一百万种不同的东西,这仍然是我得到的最接近的东西。
答案 0 :(得分:0)
我的猜测是,在没有测试任何代码的情况下,这是因为你的for循环。基本上,它遍历所有序列,并将runnable发布到处理程序,延迟为1000毫秒。
这意味着: i为0:sequence1以1000毫秒开始; i为1:sequence1也以1000毫秒开始; 我是2 ....
因为它在一个处理程序中,它不会影响for循环的运行时,这意味着所有迭代都会直接在彼此之后传递,这导致每个runnable都在“几乎”同时执行。
尝试将延迟设置为(i + 1)* 1000,这样当“时间”为“时间”时,每个“按钮”都会被激活(一秒钟)。