Intereting Posts
Почему в пользовательской учетной записи Android не отображается «Учетные записи и настройки»? Дооснащение – несколько конечных точек с одним и тем же адаптером RestAdapter Мой фрагмент не может быть добавлен в файл android.support.v4.app.Fragment Android отменяет Toast при выходе из приложения и когда отображается тост Android.util.Log vs java.util.Logging – для записи журнала в файл Масштабирование анимации в уже масштабированном виде Как использовать SQLiteDatabase.CursorFactory Собственный определенный макет, метод onDraw () не получает вызов Удаление YourSelf из списка ShareActionProvider Анимация Как удалить подписку из списка продуктов в консоли разработчика и каково ее влияние на старых подписчиков? FindViewById (android.R.id.progress) возвращает null Отклонить DatePickerDialog при нажатии кнопки возврата Проверка сетевого подключения с помощью BroadcastReceiver на Android Где находится документация для элемента XML “ attr> `для Android?

Координаты 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. 

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

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