При чтении значений getX()
и getY()
для серии событий onTouch
я обнаружил, что события ACTION_MOVE
будут возвращать координаты ACTION_DOWN
до тех пор, пока не будет пройден определенный порог расстояния от этих координат. С этого момента всегда будут возвращаться правильные координаты.
Действия по воспроизведению:
- Создайте новый проект приложения с действием по умолчанию
Добавьте следующий метод к действию по умолчанию:
@Override public boolean onTouchEvent(MotionEvent event) { Log.i("getXYDelay", "(x,y)=("+event.getX() + "," + event.getY() + ")"); return super.onTouchEvent(event); }
Запустите на устройстве и смотрите logcat, когда вы касаетесь и перетаскиваете
Вы должны увидеть, что при каждом прикосновении и перетаскивании результаты _7 _ / _ 8_ начинают изменяться только после того, как ваш палец перемещается на половину центрирующего метра или около того, и с этого момента он становится точным.
Я понимаю, как это было бы полезно во многих случаях, но это вызывает проблемы в приложении, которое я пишу, поэтому:
- Можно ли преодолеть эту начальную задержку? Или его можно обойти?
- Это зависит от устройства?
В идеале я бы хотел отключить его для одного вида поверхности OpenGL.
Примечание:
- Этого не происходит, когда я использую Samsung Note SPen.
- То же самое и с
getRawX()/getRawY()
. - Этого не происходит на эмуляторе, поэтому, по-видимому, это происходит из-за драйверов сенсорного оборудования.
Обновление: я предполагаю, что это вызвано драйверами оборудования или аналогичным уровнем и, как таковое, находится вне контроля приложения. Я также попытался опубликовать это в группе разработчиков Android, но через несколько недель кажется, что модераторы все еще сидят на моем посте.