2013-05-18 5 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 번 동작을 이동하고 마지막으로 동작을 수행 할 수 있습니다. MotionEvent에 대한 문서에서 촬영

+0

감사합니다! API <9의 멀티 터치 시뮬레이션 방법을 알고 있습니까? 이 메소드는 pointerCount를 허용하는 것으로 보이지만 한 포인터의 좌표 만 허용합니다. 따라서 필요한 이벤트를 얻는 데 사용 방법을 잘 모르겠습니다. public static MotionEvent get (long downTime, long eventTime, int 액션, int 포인터 카운트, float size, float xPrecision, float yPrecision, int 디바이스 아이디, int edgeFlags) – zavidovych

0

아래 API 9를 들어

, 당신은 올라가고 아래로되어있는 포인터를 지정까지 MotionEvent.ACTION_POINTER_X_DOWN /를 사용할 수 있습니다.

마지막으로 ACTION_UP 이벤트를 마지막으로 가져 와서 마지막 연락처를 얻을 때까지 새 연락처가 추가되거나 제거 될 때 ACTION_POINTER_X_DOWN 또는 ACTION_POINTER_X_UP 다음에 첫 번째 연락처에 대한 ACTION_DOWN 이벤트 시퀀스입니다.

 
(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

관련 문제