我目前正在为Android上的多点触控事件实施手势检测器。为了测试探测器的行为,我想将MotionEvents发送到探测器并检查他的动作。
我目前遇到的问题是我只能通过调用现有的MotionEvent.obtain()
方法之一来创建MotionEvent,但似乎这些方法不允许我为事件设置指针ID。即我只能创建单点触控事件。
有谁知道是否有可能以某种方式这样做?我可以使用另一个数据结构来输入检测器,但如果可能的话,我想避免这种情况并坚持使用MotionEvent类。
答案 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)
中列出的第三个gets()方法
您可以指定:
答案 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。