Android 如何使MotionEvent缩放?

Android 如何使MotionEvent缩放?,android,testing,instrumentation,Android,Testing,Instrumentation,我有一个仪器,我想用它来测试我的应用程序,但我似乎无法正确地模拟收缩缩放。这是我目前的代码。其要点是:按下手指1和手指2,使它们彼此靠近,然后松开它们 private void performZoomTest(int numUpdates) { long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); float x1 = 0; flo

我有一个仪器,我想用它来测试我的应用程序,但我似乎无法正确地模拟收缩缩放。这是我目前的代码。其要点是:按下手指1和手指2,使它们彼此靠近,然后松开它们

private void performZoomTest(int numUpdates) {
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis();    

    float x1 = 0;
    float y1 = 0;

    Display main = activity.getWindowManager().getDefaultDisplay();

    float x2 = main.getWidth();
    float y2 = main.getHeight();

    float xstep = x2 / (2 * numUpdates);
    float ystep = y2 / (2 * numUpdates);

    int id1 = 0 << MotionEvent.ACTION_POINTER_ID_SHIFT;
    int id2 = 1 << MotionEvent.ACTION_POINTER_ID_SHIFT;

    MotionEvent event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_DOWN + id1,
                   x1, y1, 0);
    sendPointerSync(event);
    event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_DOWN + id2,
                   x2, y2, 0);
    sendPointerSync(event);

    waitForIdleSync();

    for (int i = 0; i < numUpdates; i++) {
        eventTime = SystemClock.uptimeMillis();

        Log.i("",Integer.toString(i));
        x1 += xstep;
        y1 += ystep;

        x2 -= xstep;
        y2 -= ystep;

        event = 
            MotionEvent.obtain(downTime, eventTime, 
                       MotionEvent.ACTION_MOVE + id1,
                       x1, y1, 0);
        Log.i("id1", Integer.toString(MotionEvent.ACTION_MOVE + id1));
        sendPointerSync(event);
        event = 
            MotionEvent.obtain(downTime, eventTime, 
                       MotionEvent.ACTION_MOVE + id2, 
                       x2, y2, 0);
        Log.i("id1", Integer.toString(MotionEvent.ACTION_MOVE + id2));
        sendPointerSync(event);

        waitForIdleSync();
    } 

    eventTime = SystemClock.uptimeMillis();

    event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_UP + id1, 
                   x1, y1, 0);
    sendPointerSync(event);
    event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_UP + id2, 
                   x2, y2, 0);
    sendPointerSync(event);

    waitForIdleSync();
}
private void performZoomTest(整数更新){
长时间停机=SystemClock.uptimeMillis();
long eventTime=SystemClock.uptimeMillis();
浮点x1=0;
浮动y1=0;
Display main=activity.getWindowManager().getDefaultDisplay();
float x2=main.getWidth();
float y2=main.getHeight();
浮点xstep=x2/(2*numUpdates);
浮动ystep=y2/(2*个更新);

int id1=0我不确定你到底做错了什么,但我认为有些文章可能对你有所帮助

是关于处理多点触摸的,甚至展示了如何制作双指缩放(即缩放)手势,该手势可以与单指滑动/滚动/拖动手势区分开来

下面是示例中的一个示例。

看看这里:


我认为标准Android框架不可能进行多点触控单元测试。

我认为Android APIMotionEvent(操作指针向下,操作移动, 操作(指针向上)将解决多点触摸问题。
但是,我不知道如何获取参数“numUpdates”.

这是完全可能的,如所示。解决了我的设置问题。

我不是试图对缩放事件做出反应,而是试图发送一个事件。我想创建一个与用户实际用两个手指缩放时触发的事件相同的
运动事件。
。我知道您正在尝试创建一个“动物园”使用两个手指的手势。我相信这正是我提供的链接所做的。@Alex你找到解决方案了吗?就连我也在寻找一种方法在我的一个应用程序中生成收缩/缩放事件。这怎么可能?有这么多应用程序依赖它,怎么可能不支持单元测试?