2013-05-18 39 views
1

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

回答

0

您应该使用MotionEvent#obtain - 它可以被用来创建一个包含多个指向一个MotionEvent。 您不限于线性指针运动 - 您可以传递点数组并执行一个动作,然后x次动作移动并最终动作。

+0

感谢您的答复!你碰巧知道如何模拟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

0

从文档以供MotionEvent

对于API 9及以下,你会想用MotionEvent.ACTION_POINTER_X_DOWN/UP来指定哪些指针或将会上下。

事件序列是第一个联系人的ACTION_DOWN,后面跟着ACTION_POINTER_X_DOWN或ACTION_POINTER_X_UP,因为新联系人被添加或删除,直到您最终将拥有最后一个ACTION_UP事件来“提升”最后一个联系人。

 
(actionId, pointerCount) 
ACTION_DOWN, 1 // initial contact 
ACTION_POINTER_2_DOWN, 2 
ACTION_MOVE, 2 // generate a two-touch drag/zoom event 
ACTION_POINTER_2_UP, 2 
ACTION_UP, 1 

我是从这个SO立足岗位:How to generate zoom/pinch gesture for testing for Android

相关问题