2011-03-03 84 views
11

我可以簡單地模擬單個觸摸 - 在我的測試中點擊,輕掃,按住等,但完全停留在用Android 2.2模擬HTСDesire上的多點觸摸。Android測試,如何使用樂器模擬多點觸控(放大/縮小)?

請問,請問如何重現事件鏈來測試多點觸摸?

我想我需要使用一些棘手的MotionEvent像MASK或類似的東西,但不知道如何做到這一點。

我已經在這裏找到轉載變焦事件的轉儲: http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775?tag=mantle_skin;content

1. event ACTION_DOWN[#0(pid 0)=135,179] 
2. event ACTION_MOVE[#0(pid 0)=135,184] 
3. event ACTION_MOVE[#0(pid 0)=144,205] 
4. event ACTION_MOVE[#0(pid 0)=152,227] 
5. event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=153,230;#1(pid 1)=380,538] 
6. event ACTION_MOVE[#0(pid 0)=153,231;#1(pid 1)=380,538] 
7. event ACTION_MOVE[#0(pid 0)=155,236;#1(pid 1)=364,512] 
8. event ACTION_MOVE[#0(pid 0)=157,240;#1(pid 1)=350,498] 
9. event ACTION_MOVE[#0(pid 0)=158,245;#1(pid 1)=343,494] 
10. event ACTION_POINTER_UP(pid 0)[#0(pid 0)=158,247;#1(pid 1)=336,484] 
11. event ACTION_MOVE[#0(pid 1)=334,481] 
12. event ACTION_MOVE[#0(pid 1)=328,472] 
13. event ACTION_UP[#0(pid 1)=327,471] 

這裏是我的問題:

  • 事件ACTION_POINTER_DOWN(PID 1) #0(pid 0)= 153,230;#1(pid 1)= 380,538 **]
  • ACTION_MOVE [#0 **(pid 0)= 153,231 **;#1 **(pid 1)= 380,538 **]
  • 如何用4個座標(pid 0 x0 y0和pid 1 x1 y1)生成事件?

    看起來我需要找到如何使用下列事件的方式:

    公共靜態MotionEvent獲得(長時間停機,長EVENTTIME,INT行動,INT指針,INT [] pointerIds,PointerCoords [] pointerCoords,INT亞狀態,浮xPrecision,浮yPrecision,INT的DeviceID,詮釋edgeFlags,INT源,詮釋標誌)

    感謝Dan答覆,我已經試過這樣的邏輯,但仍然遇到問題添加座標:

    MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 135, 179, 0); 
          inst.sendPointerSync(event); 
    //    eventTime+=100; 
          event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, 135, 184, 0); 
          inst.sendPointerSync(event); 
    //    eventTime+=100; 
    
          int pointerToMove = 1; // pointer IDs are zero-based 
          event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_POINTER_DOWN, 138, 189, 0); 
          inst.sendPointerSync(event); 
    
    
          event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_MOVE, 158, 220, 0); 
          inst.sendPointerSync(event); 
    
    //    eventTime+=100; 
          event = MotionEvent.obtain(downTime, eventTime, (2 * 256) + MotionEvent.ACTION_MOVE, 138, 180, 0); 
          inst.sendPointerSync(event); 
    //    eventTime+=100; 
          event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, 135, 184, 0); 
    

    這些事件序列被發現在我的測試存根和傾倒,如:

    (14368): event ACTION_DOWN[#0(pid 0)=135,179] 
    (14368): event ACTION_MOVE[#0(pid 0)=135,184] 
    (14368): event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=138,189] 
    (14368): event ACTION_MOVE[#0(pid 0)=158,220] 
    (14368): event ACTION_MOVE[#0(pid 0)=138,180] 
    (14368): event ACTION_MOVE[#0(pid 0)=135,184] 
    

    在這裏你可以看到, (2 * 256)+ MotionEvent.ACTION_MOVE 不會改變事件:( 而 pointerToMove指針ID < < MotionEvent.ACTION_POINTER_INDEX_SHIFT 方法不適用於ACTION_POINTER_DOWN,可能是我不允許使用POINTER_DOWN這種方式嗎?

    我的問題是,我不能產生2對COORDS爲指針0和1的指針:

    (14368): event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=138,189] 
    

    在這裏你可以看到,用你的邏輯我已經加入到PID1事件,但它仍然沒有座標,導致x和y與pid 0相關聯。

    在此先感謝您。

    Yahor

    仍然沒有想法如何實現它,也有人曾發送多點觸控事件?

    +0

    你解決這個問題? – thiagolr 2013-05-28 14:28:04

    回答

    2

    我相信你只需要在傳遞給MotionEvent.obtain的'action'參數中指出指針索引。具體地說,動作的高8位是指針索引,低8位是動作(例如,MotionEvent。ACTION_MOVE)。所以,如果你想移動的第二指針這應該工作:

    int pointerToMove = 1; // pointer IDs are zero-based 
    event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_MOVE, x0, y0, 0); 
    inst.sendPointerSync(event); 
    

    -Dan

    +0

    感謝您的回覆,現在我知道如何使用您的方法來選擇指針ID,但在這種情況下,pId顯示爲無座標:您可以看到轉儲事件只有一對座標:事件ACTION_POINTER_DOWN(pid 2)[# 0(pid 0)= 138,189]比較事件原始轉儲,當用手指觸摸時:#event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)= 153,230;#1(pid 1)= 380,538] – user643154 2011-03-09 08:56:56

    0

    我應該this可以幫助你..

    相關問題