我需要模拟多点触控事件(缩放、平移等)以用于 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
}
}