【问题标题】:Generating multitouch MotionEvents for testing生成用于测试的多点触控 MotionEvent
【发布时间】:2011-04-07 21:55:32
【问题描述】:

我目前正在为 Android 上的多点触控事件实现手势检测器。为了测试检测器的行为,我想将 MotionEvents 发送到检测器并检查他的动作。

我目前遇到的问题是我只能通过调用现有的MotionEvent.obtain() 方法之一来创建 MotionEvents,但似乎这些方法不允许我为事件设置指针 ID。 IE。我只能创建单点触控事件。

有谁知道是否有可能以某种方式做到这一点?我可以使用另一个数据结构作为检测器的输入,但如果可能的话,我想避免这种情况并坚持使用 MotionEvent 类。

【问题讨论】:

  • 你找到这个问题的答案了吗?

标签: android multi-touch


【解决方案1】:

你试过了吗:

public static MotionEvent obtain (long downTime, long eventTime, int action, 
int pointers, int[] pointerIds, PointerCoords[] pointerCoords, int metaState, 
float xPrecision, float yPrecision, int deviceId, int edgeFlags, int source, int flags)

这是MotionEvent page中列出的第三个get()方法

您可以指定:

  • pointers - 点数 将参加本次活动。
  • pointerIds - 一个指针数组 提供标识符的值 每个指针。
  • pointerCoords - 一个指针数组 值提供 MotionEvent.PointerCoords 坐标 每个指针的对象。

【讨论】:

  • f20k,您能否使用您指出的方法给出任何简单的多点触控示例。我正在尝试从我的测试类中进行多点触控,但我无法通过 2 个指针对如何使用此方法进行任何示例...提前致谢。
【解决方案2】:

我最终将我的测试项目 API 级别设置为 9,而主项目仍然是 API 7,因此我可以在我的测试中使用带有 PointerCoords[] 的新 MotionEvent.obtain。 它工作正常。

【讨论】:

    【解决方案3】:

    在 Android SDK 2.3 中,有一种新方法,正如 f20k 已经提到的,它解决了这个问题。

    但我目前坚持使用 api 级别 7 (2.1)。我的解决方案是在我的触摸处理代码和我从 Android 获得的实际事件之间添加一个层,只需转换为我自己的 MotionEvent 类(我将其命名为 TouchInfo)。此外,这使我能够在 JVM 上实现整个手势处理,这使我能够通过 TDD 驱动代码。我也可以使用 Android JUnit 测试来完成,但是在 JVM 上开发代码让我可以使用 junit4、hamcrest 和 mockito 之类的东西。

    如果您不想添加图层,第三种方法是使用robolectric

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2021-08-27
      相关资源
      最近更新 更多