Android: взаимодействие с экраном блокирует кнопки - PullRequest
1 голос
/ 21 ноября 2010

У меня в приложении есть как onKeyDown, так и onMotionEvent.Оба они работают, но onKeyDown ведет себя странно.Я всегда могу взаимодействовать с экраном на устройстве, но после взаимодействия с экраном кнопки не работают.Чтобы они снова заработали, мне нужно нажать другие кнопки (те, которые я не использую), чтобы они снова заработали.И если я снова буду взаимодействовать с экраном, кнопки снова не будут работать.

Приложение, которое я пишу, является игрой, поэтому вызовы кнопок выполняются на поверхности, а затем передаются в поток, запускающий игру.

Я отлаживаю в HTC Aria, но проблема сохраняется и в моих эмуляторах.

РЕДАКТИРОВАТЬ

Базовый код, который я имею, такой же, как подробно здесь .

Код для кнопок следующий:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent msg) {
     return thread.doKeyDown(keyCode, msg);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
     return thread.doTouchEvent(event);
    }


    public boolean doKeyDown(int keyCode, KeyEvent msg) {
     synchronized (mSurfaceHolder) {
      if (keyCode == KeyEvent.KEYCODE_MENU) {
       showDialog(DIALOG_PAUSED_ID);
                            return true;
      }
      return false;
     }
    }

    public boolean doTouchEvent(MotionEvent event) {
     synchronized (mSurfaceHolder) {
      if (mState == STATE_PLAYING) {
       if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE){
              if (event.getX() > 2 * (mWallX / 3)) {

               //shoot arrow
               shoot(event.getX(), event.getY());

               //turn player
               mPlayer.rotate(event.getX(), event.getY());

            return true;
        } else if (event.getAction() != MotionEvent.ACTION_MOVE && event.getX() < 2 * (mWallX / 3)) {
         //temp button on left for stress test
               stressTest = !stressTest;
               return true;
        }
       }
      }
   return false;
     }
    }

1 Ответ

1 голос
/ 21 ноября 2010

Зайдите в Logcat и посмотрите сообщения, которые появляются, когда вы воссоздаете свою проблему.

Если вы видите что-то вроде «таймаута отправки ключа», то кнопки работают, ваш код просто занят, блокируя любой новый вводот получения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...