BogueLa gestion des événements de mouvement d'android est-elle précise?
J'ai un bogue bizarre dans mon application de piano. Parfois les clés (et donc les notes) pendent. Je l'ai fait beaucoup de débogage et rétréci vers le bas ce qui ressemble à l'inexactitude de la gestion des événements de mouvement androïdes:
DEBUG/(2091): ACTION_DOWN A4
DEBUG/(2091): KeyDown: A4
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_UP B4 //HOW CAN THIS BE????
DEBUG/(2091): KeyUp: B4
DEBUG/(2091): Stream is null, can't stop
DEBUG/(2091): Hanging Note: A4 X=240-287 EventX=292 Y=117-200 EventY=164
DEBUG/(2091): KeyUp Note: B4 X=288-335 EventX=292 Y=117-200 EventY=164
De toute évidence, on peut voir ici que de nulle part je tout à coup un ACTION_UP
pour une autre note. Ne devrais-je pas obtenir un ACTION_MOVE
en premier?
Comme le montre la fin du journal, ce n'est certainement pas une erreur dans la détection de région, puisque l'événement ACTION_UP
est clairement dans la région B4.
Logging détails de mise en œuvre
Chaque onTouchEvent()
appel est connecté, de sorte que le journal est exacte.
Le pseudo-code correspondant pour l'enregistrement de ACTION_MOVE est:
Key oldKey = Key.get(event.getHistoricalX(), event.getHistoricalY());
Key newKey = Key.get(event.getX(), event.getY());
Question
Est-ce normal pour Android (le saut en coordonnées)?
Un ACTION_UP
peut-il apparaître sans aucun ACTION_MOVE
précédent vers ses coordonnées?
Sur quel périphérique est-ce que vous effectuez le suivi de plusieurs doigts? Quelle est la répartition de ces sorties de journal? EventX est 292 dans ces deux lignes, si je lis correctement cela ne devrait pas mettre à la fois les notes "Hanging Note" et "KeyUp Note" dans la gamme B4? – adamp
Je n'ai pas le moindre, mais aussi curieux. Fonctionne-t-il correctement dans l'émulateur et/ou d'autres périphériques? – Gerard
@adamp. En regardant en arrière après un moment, en effet la sortie du journal semble un peu suspecte, car elle montre les mêmes coordonnées et une note différente. Cependant, je suis passé à l'enregistrement des touches pressées actuelles avec des identifiants de pointeur et libérant le bon quand un pointeur est levé. – Peterdk