【问题标题】:In Android, what is the difference between getAction() and getActionMasked() in MotionEvent?在 Android 中,MotionEvent 中的 getAction() 和 getActionMasked() 有什么区别?
【发布时间】:2019-08-11 07:26:02
【问题描述】:

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

我什么时候用哪个?

public void onTouchEvent(MotionEvent e)

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

public final int getAction ()

public final int getActionMasked()

【问题讨论】:

    标签: android touch motionevent


    【解决方案1】:

    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
      • ...

    【讨论】:

    • 我还没有看到:我为什么要使用 getActionMasked()?这比 getAction() 有什么优势吗?
    • @peedee 使用getAction(),您必须进行位移/掩码来分离这两条数据;而对于getActionMasked()getActionIndex(),您可以分别获取它们(但由于两个单独的函数调用,运行时成本可能更高)。我想getAction() 返回的组合表示是在 Android 操作系统内部使用的,因为以这种方式组合两个值在移动硬件上的存储和缓存效率更高,请记住触摸 API 还存储最近触摸事件的历史记录,因此可能需要存储许多此类数据..
    【解决方案2】:

    是的,它们都返回动作(向上/向下等),但getAction() 可能会返回带有指针信息的动作,在这种情况下,事件可能会有所不同。 getActionMasked() 将始终返回带有“屏蔽”指针信息的“简单”操作(明白吗?)。然后,您将在同一事件上调用 getPointerIndex() 以获取指针的索引。请注意,您最常在具有多个接触点(指针)的多点触控设备上看到这一点。指针索引本质上是一种将事件与接触点匹配的方法,以便您可以将它们区分开来。

    【讨论】:

    • 返回值中的附加位域;动作和指针索引以相同的整数返回。 Android 定义了一组位掩码来提取它们(本质上就是 getActionMasked 所做的)
    猜你喜欢
    • 2011-07-11
    • 2021-05-24
    • 2017-09-13
    • 1970-01-01
    • 2011-05-05
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多