代码之家  ›  专栏  ›  技术社区  ›  Maik

生成用于测试的多点触控运动事件

  •  1
  • Maik  · 技术社区  · 15 年前

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

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

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

    3 回复  |  直到 13 年前
        1
  •  1
  •   f20k    15 年前

    你试过了吗?

    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

    您可以指定:

    • 指针 -点的数量 将在此事件中。
    • 菊科植物 -指针数组 为提供标识符的值 每个指针。
    • 葡萄园 -指针数组 提供的值 MotionEvent.PointerCords坐标 每个指针的对象。
        2
  •  1
  •   Jonas Alves    15 年前

    当主项目仍然是API 7时,我已经将我的测试项目API级别设置为9,因此我可以在测试中使用新的motionevent.obtain和pointercords[]。 它工作得很好。

        3
  •  0
  •   Maik    15 年前

    对于android sdk 2.3,有一个新的方法,正如f20k所提到的,它可以解决这个问题。

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

    第三种方法是 robolectric 如果不想添加层。