Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何正确使用多点触摸-MotionEvent.getActionIndex()的用途?_Android_Multi Touch - Fatal编程技术网

Android 如何正确使用多点触摸-MotionEvent.getActionIndex()的用途?

Android 如何正确使用多点触摸-MotionEvent.getActionIndex()的用途?,android,multi-touch,Android,Multi Touch,的文档一致性保证:“(对于触摸事件)…指针一次下降一个,作为一个组移动,然后一次上升一个,或者被取消” 如果我理解正确,有两种方法可以确定触发onTouchEvent()的操作: MotionEvent.getAction() MotionEvent.getActionMasked()和MotionEvent.getActionIndex()(这应该用于多点触摸,这正是我想要的) 由于getActionMasked()总是只返回ACTION\u POINTER\u DOWN和ACTION\u

的文档一致性保证:“(对于触摸事件)…指针一次下降一个,作为一个组移动,然后一次上升一个,或者被取消”

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

  • MotionEvent.getAction()
  • MotionEvent.getActionMasked()
    MotionEvent.getActionIndex()
    (这应该用于多点触摸,这正是我想要的)
由于
getActionMasked()
总是只返回
ACTION\u POINTER\u DOWN
ACTION\u POINTER\u UP
,根据一致性保证,在
MotionEvent
内部应该始终只传递一个指针到
onTouchEvent()
,这意味着
MotionEvent.getActionIndex()
将始终返回0

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


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

事件
操作指针\u向下
表示现在有两个或多个手指正在触摸屏幕,以区分您需要使用的是第二个还是第三个(etc)手指
getActionIndex()


因为
getActionMasked()
总是只返回
ACTION\u POINTER\u DOWN
ACTION\u POINTER\u UP


如果有任何混淆,
getActionMasked()
会返回更多类型,如
ACTION\u DOWN
ACTION\u MOVE
,等等。

我已经在这个优秀的函数的帮助下找到了它

函数
getActionMasked()
获取应用于所有指针或其中一个指针的操作(如果操作是
action\u POINTER\u DOWN
action\u POINTER\u UP
),可以通过
getActionIndex()
获得

我所缺少的一条信息是,当您获得仅适用于其中一个指针的屏蔽操作
action\u POINTER\u DOWN
时,其他指针仍在调用中提供。但是,您可以保证在对
onTouchEvent()
的每次调用中最多有一个
ACTION\u POINTER\u DOWN
ACTION\u POINTER\u UP
出现在
onTouchEvent()

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


因此,如果我们想在“反对移动”中执行某些特定操作,我们必须使用指针索引,而不是获取ActionIndex。

但是如果操作指针向下意味着两个(或更多)手指正在触摸屏幕,为什么我需要区分它们?他们都在触摸屏幕,所以行动适用于他们两人,对吗?谢谢山姆的帮助,我想我找到了答案!回答您的问题:是的,对这两个动作触发相同的动作,但是您需要使用
getActionIndex()
来区分两个手指手势和三个手指手势。(如果您的设备只能识别两个手指,那么
getActionIndex()
实际上并不重要。)实际上,两个事件是通过两个不同的操作触发的。首先使用
ACTION\u DOWN
和一个指针,然后使用
ACTION\u pointer\u DOWN
和两个指针,并使用
getActionIndex()
表示第二个指针。当然,如果我理解正确的话——但现在确实有意义了。听起来你现在明白了。