J'ai un onKeyDown
et onMotionEvent
surchargé dans mon application. Les deux fonctionnent, mais le onKeyDown
a un comportement étrange. Je peux toujours interagir avec l'écran de l'appareil, mais après avoir interagi avec l'écran, les boutons ne fonctionnent pas. Pour les faire fonctionner à nouveau, je dois appuyer sur d'autres boutons (ceux que je n'utilise pas) pour qu'ils puissent fonctionner à nouveau. Et si j'interagis de nouveau avec l'écran, les boutons ne fonctionneront plus.Android: Interagir avec l'écran verrouille les boutons
L'application que j'écris est un jeu, donc les appels de bouton sont faits à la surface et ensuite passés au fil de la partie. Je débogue sur un HTC Aria, mais le problème persiste également dans mes émulateurs.
EDIT
Le code de base que j'ai est la même que celle here détaillée.
Le code pour les boutons sont les suivants:
@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;
}
}
Qu'est-ce que vous revenez de onKeyDown? –
Est-ce que vous bloquez le thread de l'interface utilisateur? C'est à dire. passer le contrôle du gestionnaire d'événement au code du jeu. Pouvez-vous publier le code incriminé? –
code postal ... vous bloquez probablement le fil de l'interface utilisateur qui décrirait le comportement clé que vous voyez/ressentez –