ошибка
У меня странная ошибка в моем приложении для фортепиано. Иногда ключи (и, следовательно, заметки) зависают. Я сделал много отладок и сузил их до того, что похоже на неточность андроида обработки событий движения:
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
Здесь ясно видно, что из ниоткуда у меня вдруг появляется ACTION_UP
для другой заметки. Разве я не должен определенно получить ACTION_MOVE
первым?
Как показано в конце журнала, это определенно не ошибка при обнаружении области, поскольку событие ACTION_UP
явно находится в области B4.
Сведения о ведении журнала
Каждый вызов onTouchEvent()
регистрируется, поэтому журнал является точным.
Соответствующий псевдокод для ведения журнала ACTION_MOVE:
Key oldKey = Key.get(event.getHistoricalX(), event.getHistoricalY());
Key newKey = Key.get(event.getX(), event.getY());
Вопрос
Это нормальное поведение для Android (прыжки в координатах)?
Может ли ACTION_UP
просто возникать без каких-либо предыдущих ACTION_MOVE
в направлении его координат?