У меня в приложении есть как 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;
}
}