如何检查两个按钮是否同时并入ANDROID?

时间:2019-06-01 21:58:41

标签: java android button ontouchlistener onlongclicklistener

我有两个圆形按钮,每个按钮都有不同的颜色。

现在如果同时按住两个按钮,我希望它们都变成一种全新的第三种颜色,以及声音效果,一些图形变化等。

以下代码似乎在大约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;
          }
      });

为什么这段代码如此不稳定?

1 个答案:

答案 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观察者模式的美。在您的情况下,这将是完美的解决方案。