Подтвердить что ты не робот

Android: разница между ACTION_UP и ACTION_POINTER_UP

из документа android doc, я действительно не понимаю разницу между ACTION_UP и ACTION_POINTER_UP. http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_DOWN

В основном я хочу захватить событие, когда один палец выпущен с экрана (даже если он еще может касаться его)

спасибо!

4b9b3361

Ответ 1

Я полагаю, что это связано с добавлением Multi-touch, ACTION_UP находится с API уровня 1, но ACTION_POINTER_UP был добавлен в API Level 5, когда был добавлен мультитач.

Результат, который вы получите, будет зависеть от того, какой метод вы вызываете, getAction() вернет ACTION_UP, тогда как getActionMasked() предоставит ACTION_POINTER_UP, но также позволит вам вызвать getActionIndex(), чтобы узнать, какой из указателей с несколькими касаниями имеет только был поднят. Я думаю, что это то, что вы хотите сделать.

Ответ 2

Начните здесь, если вы еще не прочитали: http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

Android думает о событиях касания в терминах жестов. Жест в этом смысле включает в себя все события от первого пальца, который касается экрана до последнего пальца, который покидает экран. Целая последовательность событий одного жестов всегда отправляется в ту же точку зрения, которая была выбрана во время начального ACTION_DOWN, если родитель не перехватывает поток событий по какой-либо причине. Если родитель перехватывает поток дочерних событий, дочерний элемент получит ACTION_CANCEL.

Если вы работаете с событиями мультитач, всегда используйте значение, возвращаемое getActionMasked(), чтобы определить действие. Если вам не нужен мультитач или работают со старой версией платформы, вы можете игнорировать события ACTION_POINTER_ *.

  • ACTION_DOWN - это первый палец, касающийся экрана. Это начинает жест. Данные указателя для этого пальца всегда находятся в индексе 0 в MotionEvent.
  • ACTION_POINTER_DOWN - для дополнительных пальцев, которые входят в экран за пределами первого. Данные указателя для этого пальца находятся в индексе, возвращаемом getActionIndex().
  • ACTION_POINTER_UP отправляется, когда палец покидает экран, но по крайней мере один палец все еще касается его. Последний пример данных о пальце, который поднялся, находится в индексе, возвращаемом getActionIndex().
  • ACTION_UP отправляется, когда последний палец покидает экран. Последний образец данных о пальце, который поднялся, находится в индексе 0. Это завершает жест.
  • ACTION_CANCEL означает, что весь жест был прерван по какой-то причине. Это завершает жест.