Android: разница между ACTION_UP и ACTION_POINTER_UP - PullRequest
39 голосов
/ 24 ноября 2010

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

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

спасибо!

Ответы [ 2 ]

124 голосов
/ 24 ноября 2010

Начните здесь, если вы еще не прочитали его: 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 означает, что весь жест по какой-то причине был прерван.На этом жест заканчивается.
12 голосов
/ 24 ноября 2010

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

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

...