我需要模拟多点触摸事件(缩放,平移等)以用于Android应用程序的测试测试。一种方法是手动生成模拟实际输入的相应序列MotionEvent,然后逐个调度它们。在我这样做之前,是否有一些很好的API来进行这种模拟?我想过去有很多人面对这个问题。我正在研究Robotium Solo,但它只提供单个指针的触摸/拖动。以编程方式模拟测试中的多点触摸事件以进行测试
如果没有这样的API,那么解决这个问题的最好方法是什么?我正在考虑编写一个函数,它接受每个参与指针的一对点(开始,结束)和持续时间,但这会将手势限制为线性指针运动。
public void twoFingerTouchEvent(
Point from1, Point to1, int duration1,
Point from2, Point to2, int duration2) {
if (from1.equals(to1) && from2.equals(to2)) {
// two pointer tap
// DISPATCH_DOWN
// DISPATCH_POINTER_DOWN
// WAIT min(duration1, duration2)
// DISPATCH_POINTER_UP
// WAIT abs(duration1 - duration2)
// DISPATCH_UP
}
else if (from1.equals(to1) || from2.equals(to2)) {
// one of two pointers dragged after tap
// DISPATCH_DOWN
// DISPATCH_POINTER_DOWN
// DISPATCH_MOVE for moving pointer every 3-5 pixels, account for duration
// DISPATCH_POINTER_UP
// DISPATCH_UP
}
else {
// two pointer drag
// DISPATCH_DOWN
// DISPATCH_POINTER_DOWN
// DISPATCH_MOVE for both pointers in alternating order every 3-5 pixels
// DISPATCH_POINTER_UP
// DISPATCH_MOVE for pointer with longer duration
// DISPATCH_UP
}
}
感谢您的答复!你碰巧知道如何模拟API <9的多点触摸吗?此方法似乎接受pointerCount,但只接受一个指针的坐标。所以我不知道如何使用它来获得所需的事件: 在API 5中引入: public static MotionEvent获取(long downTime,long eventTime,int action,int pointerCount,float x,float y,float pressure, float size,int metaState,float xPrecision,float yPrecision,int deviceId,int edgeFlags) – zavidovych