在Android中,MotionEvent中的getAction()和getActionMasked()有什么区别?

use*_*587 38 android touch motionevent

我对Android中的两种方法感到困惑.似乎这两种方法都告诉你它是什么类型的事件,即它是一个向下或向上的事件.

我什么时候用哪个?

public void onTouchEvent(MotionEvent e)
Run Code Online (Sandbox Code Playgroud)

请不要引用文档,因为我读了它,并且我没有看到任何参数可以提供给任何一种方法来获得不同的东西.

public final int getAction ()
Run Code Online (Sandbox Code Playgroud)

public final int getActionMasked()
Run Code Online (Sandbox Code Playgroud)

wan*_*nik 43

getAction()返回指针id和事件(即上,下,移动)信息.

getActionMasked()只返回一个事件(即上,下,移动)信息.其他信息被掩盖了.

例如:

getAction()返回0x0105.
getActionMasked()将返回0x0005,即0x0105 && ACTION_MASK.

  1. ACTION_MASK的值为0xFF.它掩盖了以下行为.
    • ACTION_DOWN 0,UP 1,MOVE 2
    • ACTION_POINTER_DOWN 5,UP 6
  2. ACTION_POINTER_ID_MASK的值为0xFF00.它将指针ID与以下不推荐使用的常量进行了屏蔽.
    • ACTION_POINTER_1_DOWN 0x0005
    • ACTION_POINTER_2_DOWN 0x0105
    • ACTION_POINTER_3_DOWN 0x0205
    • ...

  • @peedee使用`getAction()`,你必须使用bitshift/mask来分隔这两个数据; 而使用`getActionMasked()`和`getActionIndex()`你可以单独得到它们(但由于两个独立的函数调用,可能会有更高的运行时成本).我想象`getAction()`返回的组合表示是Android操作系统内部使用的组合表示,因为这种方式组合两个值在移动硬件上具有更高的存储和缓存效率,同时要记住触摸API还存储了最近触摸事件的历史记录,因此可能存储了许多这些数据. (7认同)
  • 我还没有看到它:为什么我会想要使用getActionMasked()?这比getAction()有什么优势吗? (4认同)

C B*_*B J 23

是的,它们都返回动作(向上/向下等),但是getAction可以返回带有指针信息的动作,在这种情况下,事件可能会有所不同.getActionMasked总是返回"简单"动作,指针信息"Masked out"(得到它?)然后你会在同一个事件上调用getPointerIndex来获取指针的索引.请注意,在具有多个接触点(指针)的多点触控设备上,您最常见到这一点.指针索引本质上是一种将事件与接触点匹配的方法,因此您可以区分它们.