android:ACTION_UP和ACTION_POINTER_UP之间的区别

cla*_*amp 39 android multi-touch

仅从android doc我真的不明白ACTION_UP和ACTION_POINTER_UP之间的区别. http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_DOWN

基本上我想捕获一个手指从屏幕释放时的事件(即使另一个手指仍可能触摸它)

谢谢!

ada*_*amp 127

如果您还没有阅读,请从这里开始:http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

Android会根据手势来考虑触摸事件.在这种意义上的手势包括从触摸屏幕的第一手指到离开屏幕的最后一根手指的所有事件.单个手势的整个事件序列始终发送到在初始ACTION_DOWN期间拾取的同一视图,除非父级由于某种原因拦截事件流.如果父级拦截子级的事件流,则子级将获得ACTION_CANCEL.

如果您正在处理多点触控事件,请始终使用getActionMasked()返回的值来确定操作.如果您不需要多点触控或使用较旧的平台版本,则可以忽略ACTION_POINTER_*事件.

  • ACTION_DOWN用于触摸屏幕的第一根手指.这开始了手势.此手指的指针数据始终位于MotionEvent中的索引0处.
  • ACTION_POINTER_DOWN用于进入超出第一个屏幕的额外手指.该手指的指针数据位于getActionIndex()返回的索引处.
  • 当手指离开屏幕但至少有一根手指仍在触摸屏幕时发送ACTION_POINTER_UP.有关手指上移的最后一个数据样本位于getActionIndex()返回的索引处.
  • 最后一根手指离开屏幕时发送ACTION_UP.关于手指上升的最后一个数据样本是在索引0处.这结束了手势.
  • ACTION_CANCEL表示由于某种原因中止了整个手势.这结束了手势.

  • 谢谢,这个答案填补了教程和官方文档中的许多空白! (6认同)

Gee*_*uUp 13

我认为它源于添加了Multi-touch,ACTION_UP自API级别1开始就已经存在,但是当添加多点触摸时,在API级别5中添加了ACTION_POINTER_UP.

你得到的结果将取决于你调用的方法,getAction()将返回ACTION_UP而getActionMasked()将给出ACTION_POINTER_UP,但也允许你调用getActionIndex()来找出刚刚引发了哪些多点触控指针.我想这就是你想要做的.

  • 当屏幕上仍有手指时,使用ACTION_POINTER_UP代替ACTION_UP (5认同)