android:ACTION_UP和ACTION_POINTER_UP之间的区别

时间:2010-11-24 15:23:55

标签: android multi-touch

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

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

谢谢!

2 个答案:

答案 0 :(得分:124)

如果您尚未阅读,请从此处开始: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表示整个手势因某种原因而中止。这结束了手势。

答案 1 :(得分:12)

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

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