2011-06-10 73 views
4

我有一个仪器,我想用来测试我的应用程序,但我似乎无法得到捏缩放模拟正确。这是我目前的代码。它的要点是:按下手指1和手指2,将它们相互靠近移动,然后释放它们。如何制作MotionEvent进行缩放?

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(); 
} 

结果似乎是应用程序将两个事件视为不同的事件,并且不会将它们注册为单个事件。有没有更好的方法来做到这一点?

回答

0

我不确定你做错了什么,但我认为那里有一些可能对你有帮助的文章。

This blog post from Google是关于处理多点触摸,甚至显示如何制作与单指滑动/滚动/拖动手势区分的双指缩放(即缩放)手势。

下面是一个来自示例的link to the code

+0

我不想对缩放事件做出反应,我试图让其中一个发送。我想创建一个“MotionEvent”,它与用户用两个手指实际缩放的事件相同。 – Alex 2011-06-10 19:36:48

+0

我知道你正在尝试创建一个使用两个手指的“缩放”手势。我相信这正是我提供的链接所做的。 – 2011-06-10 19:40:05

+0

@Alex您是否找到解决方案?即使我正在寻找一种方法来在我的一个应用程序中生成捏/缩放事件。 – Sunil 2013-02-06 10:21:51

0

我认为Android的API MotionEvent(ACTION_POINTER_DOWN,ACTION_MOVE, ACTION_POINTER_UP)就解决了多点触摸的问题。 但是,我不知道如何获取参数“numUpdates”。