2011-06-10 76 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」。