我有两个圆形按钮,每个按钮都有不同的颜色。
现在如果同时按住两个按钮,我希望它们都变成一种全新的第三种颜色,以及声音效果,一些图形变化等。
以下代码似乎在大约50%的时间内都能正常工作,通常只有将两个按钮完全按下时才能正常工作。 (如果按住一个按钮,然后紧接着按住另一个按钮,即使是一根头发,该应用程序似乎也崩溃了。)
new Thread(new Runnable() {
public void run(){
while (keepgoing) {
if (held1== true && held2==true) {
player2.start();
greenbutton.setBackground(getResources().getDrawable(R.drawable.brickbutton));
pinkbutton.setBackground(getResources().getDrawable(R.drawable.brickbutton));
keepgoing = false;
return;
}
}
return;
}
}).start();
}
当button1.setOnLongClick事件发生时,held1设置为true。 当Button1的OnTouchListener发生MotionEvent.ACTION_UP情况时,将hold1设置为false。
与按钮2相同,就像这样。
greenbutton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
held1 = true;
player.start();
if (switched){
revertButtons();
return true;
}
else {
switchButtons();
return true;
}
}
});
greenbutton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_UP:
held1 = false;
player.start();
if (bricked){
return true;
}
if (switched){
revertButtons();
break;
}
else {
switchButtons();
break;
}
}
return false;
}
});
为什么这段代码如此不稳定?
答案 0 :(得分:0)
如何做这样的事情,
while(held1 == true){
if(held2 == false){
//do something
}else{
player2.start();
greenbutton.setBackground(getResources().getDrawable(R.drawable.brickbutton));
pinkbutton.setBackground(getResources().getDrawable(R.drawable.brickbutton));
keepgoing = false;
return;
}
}
想法是模仿观察者模式,如解决方案。不仅当它们像您一样固定在一起时,而且要观察第二个,以便在任何时候单击它们都可以完成工作。这就是RxJava / Rxandroid观察者模式的美。在您的情况下,这将是完美的解决方案。