Как проверить, находятся ли две кнопки в руках одновременно ANDROID? - PullRequest
0 голосов
/ 02 июня 2019

У меня есть две круглые кнопки, каждая из которых имеет свой цвет.

Теперь, если обе кнопки удерживаются одновременно, я хочу, чтобы они обе превратили совершенно новый 3-й цвет вместе со звуковым эффектом, некоторыеграфические изменения и т. д.

Следующий код, кажется, работает примерно в 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();


}

hold1 устанавливается в значение true, когда происходит событие button1.setOnLongClick.hold1 устанавливается в false, когда случай MotionEvent.ACTION_UP происходит для OnTouchListener для button1.

то же самое для кнопки 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 голосов
/ 02 июня 2019

Как насчет того, чтобы сделать что-то подобное,

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-наблюдателя. Это было бы идеальным решением в вашем случае.

...