3

MotionEvent的文档在 Consistency Guarantees 中指出:“(对于触摸事件)......指针一次下降一个,作为一组移动,然后一次上升一个或被取消”

如果我理解正确,有两种方法可以确定触发的操作onTouchEvent()

  • MotionEvent.getAction()
  • MotionEvent.getActionMasked()with MotionEvent.getActionIndex()(这应该用于多点触控,这就是我所追求的)

由于getActionMasked()总是只返回ACTION_POINTER_DOWNand ACTION_POINTER_UP,根据一致性保证,应该总是只有一个指针传递MotionEventonTouchEvent(),这意味着MotionEvent.getActionIndex()总是返回 0。

如果是这样,那有什么意义MotionEvent.getActionIndex()呢?换句话说:我错过了什么?

更新:为了进一步澄清我的问题:MotionEvent.getActionMasked()只返回一个动作并MotionEvent.getActionIndex()告诉我们它适用于哪个指针。这是否意味着我们无法获得其他指针的操作?或者如果所有指针都相同,为什么要指定 actionIndex 呢?

4

3 回答 3

2

该事件ACTION_POINTER_DOWN表示两个或多个手指现在正在触摸屏幕,以区分您需要使用的是第二根手指还是第三根(等)手指getActionIndex()


因为getActionMasked()总是返回公正ACTION_POINTER_DOWNACTION_POINTER_UP

如果有任何混淆,getActionMasked()返回更多类型,如ACTION_DOWN,ACTION_MOVE等。

于 2012-11-24T22:43:57.067 回答
0

在这个出色的答案的帮助下,我已经弄清楚了。

函数getActionMasked()获取适用于所有指针或仅适用于其中一个指针的操作(如果操作是ACTION_POINTER_DOWNand ACTION_POINTER_UP),您可以使用getActionIndex().

我缺少的一条信息是,当您获得ACTION_POINTER_DOWN仅适用于其中一个指针的屏蔽操作时,调用中仍提供其他指针。但是您可以保证每次调用最多有一个ACTION_POINTER_DOWNACTION_POINTER_UP存在于onTouchEvent().

于 2012-11-25T07:03:43.440 回答
0

getActionIndex() 返回指针在两个主要事件上的索引,即DOWN 和UP。在所有其他动作中,例如 ACTION_MOVE,它总是返回索引 0 处的指针。

因此,如果我们想针对 MOVE 实现一些特定的操作,我们必须使用指针索引而不是获取 ActionIndex。

于 2019-10-14T10:39:36.757 回答