生成多点触控MotionEvent以进行测试

时间:2010-09-03 15:06:53

标签: android multi-touch

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

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

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

3 个答案:

答案 0 :(得分: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

中列出的第三个gets()方法

您可以指定:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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