Intereting Posts
Использовать PreferenceActivity для настройки виджета, как получить предпочтение? Как избавиться от предупреждения: используйте '$' вместо '.' Для внутренних классов в Eclipse Как получить выделенный текст из edittext в android? Любой способ получить ссылку на элементы Actionbar для тестирования Junit в android? Могу ли я получить цвет подсказки по умолчанию EditText? Приложение Android System Installer «Приложение не установлено» почему? Где журнал для этого? Как вызвать действие, когда пользователь нажал кнопку ввода? Кнопка выбора фона Stop scrollView в середине прокрутки Как отключить пейджинг, проверив пальцем в ViewPager, но все же сможете прокручивать программно? Android – приостановка всех потоков: * ms Переход от взлома Android не взрывает GridView Как получить текущее местоположение в Google Maps Android API v2? Как подключиться к локальному хосту от VS Android Emulator BitmapFactory.decodeResource () возвращает null для формы, определенной в xml drawable

Координаты Android onTouchEvent Пропустить

Я мое приложение, у меня есть элемент, который требует, чтобы пользователь перемещал его по экрану, и для этого я использую RelativeLayout и onTouchListener.

Проблема, с которой я сталкиваюсь, заключается в том, что внутри моего onTouchListener я получаю некоторые странные результаты для getX() и getY() .

Я добавил следующую строку кода в свой onTouch() -> ACTION_MOVE :

Log.v("example", "Touch: {x:" + event.getX() + " } {y:" + event.getY() + "}");

Ниже приведены мои результаты LogCat.

04-29 03: 16: 11.000: V / myApp (24188): Touch Down!
04-29 03: 16: 11.057: V / myApp (24188): Touch: {x: 69.78699} {y: 107.774216}
04-29 03: 16: 11.103: V / myApp (24188): Touch: {x: 77.86926} {y: 173.37648}
04-29 03: 16: 11.158: V / myApp (24188): Touch: {x: 69.78699} {y: 108.781845}
04-29 03: 16: 11.205: V / myApp (24188): Touch: {x: 77.86926} {y: 174.38597}
04-29 03: 16: 11.463: V / myApp (24188): Touch: {x: 69.78699} {y: 109.64778}
04-29 03: 16: 11.502: V / myApp (24188): Touch: {x: 77.86926} {y: 175.62172}
04-29 03: 16: 11.596: V / myApp (24188): Touch: {x: 69.23099} {y: 109.40666}
04-29 03: 16: 11.654: V / myApp (24188): Touch Up!

Как вы можете видеть, перемещая мой палец очень медленно по прямой линии, я получаю неуклюжий результат, где правильные координаты – фактически каждая другая линия.

Это приводит к тому, что мой взгляд прыгает назад и четвертый между желаемой позицией и смещением, когда я перетаскиваю ее по экрану.

Я добавил в проверки, чтобы убедиться, что я создаю только один элемент, и этот этот слушатель не вызывается нигде, кроме этого единственного представления.

Кто-нибудь еще видел эту проблему раньше, и есть ли представление о том, что я могу сделать, чтобы исправить это?

РЕДАКТИРОВАТЬ

 View.OnTouchListener layerMover = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.d("example", "Touch down"); case MotionEvent.ACTION_UP: Log.d("example", "Touch up"); case MotionEvent.ACTION_MOVE: Log.v("example", "Touch: {x:" + event.getX() + " } {y:" + event.getY() + "}"); v.setX(event.getX()); v.setY(event.getY()); v.invalidate(); } return true; } }; 

Solutions Collecting From Web of "Координаты Android onTouchEvent Пропустить"

Я смог решить эту проблему, используя event.getRawX() и event.getRawY() .

Вы возвращаете true внутри onTouch () после обработки события ACTION_MOVE? Более того, как объясняет официальный справочник Android, «Для событий эффективности движения можно объединить несколько выборок движения в пределах одного объекта». Поэтому вы должны использовать getX () и getY () только для получения последних координат. Для доступа к более ранним координатам вы можете использовать методы getHistoricalX (int) и getHistoricalY (int). Для получения дополнительной информации ознакомьтесь с официальной ссылкой.

MotionEvent иногда возвращает абсолютные координаты X и Y относительно представления, а иногда и относительные координаты к предыдущему событию движения.

 getRawX() and getRawY() that is guaranteed to return absolute coordinates, relative to the device screen. While getX() and getY(), should return you coordinates, relative to the View, that dispatched them. 

Причина позади

@ Матт Кларк ответ