2016-10-20 4 views
1

on two fingers down 이벤트를 몇 밀리 초 동안 트리거하려고합니다. 내가 ACTION_POINTER_DOWN 아무것도에 대해 같은 일이 일어나고 수행하려고 할 경우프로그래밍 방식으로 ACTION_POINTER_DOWN 이벤트를

내가 지금이 코드

objImageView.getLocationOnScreen(coords); 
        int xa = coords[0]; 
        int ys = coords[1]; 
        objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
        objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
        objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 

를 사용하여 간단한 터치 이벤트를 트리거 할 수 있어요. 여기 내 코드는 다음과 같습니다.

int[] coords = new int[2]; 
     parentLayout.getLocationOnScreen(coords); 
     int xa = coords[0]; 
     int ys = coords[1]; 
     parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_POINTER_DOWN, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
     parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 
     parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_POINTER_UP, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0)); 

나는 Google을 둘러 봤지만 시도 할만한 것을 찾지 못했습니다. 사용자가 두 손가락을 내려 놓고 몇 밀리 초 동안 손가락을 쥐고있을 때 호출되는 동일한 이벤트를 트리거하려고합니다.

미리 감사드립니다.

+0

글쎄, 아직 동작을 수행 할 수 없습니다. 지금은 TouchListener의 코드를 강제로 다른 메소드에서 작성하여 호출하고 있습니다. –

+0

정확히 액션 포인터를 사용 하시겠습니까?몇 밀리 초마다 트리거 할 수 있기를 원하면 타이머 또는 다른 타이밍 이벤트가있는 스레드를 사용하십시오. onTouch 코드를 void로 추출하고 스레드와 onTouch에서 트리거하십시오. – Zoe

답변

1

"두 손가락"을 시뮬레이트하려면 지금처럼 포인터가 개 이상인 모션 이벤트를 만들어야합니다.

이렇게하려면 여러 포인터를 지원하는 MotionEvent obtain 변형을 사용하십시오 (문서 번호 here).

MotionEvent obtain (long downTime, 
       long eventTime, 
       int action, 
       int pointerCount, 
       PointerProperties[] pointerProperties, 
       PointerCoords[] pointerCoords, 
       int metaState, 
       int buttonState, 
       float xPrecision, 
       float yPrecision, 
       int deviceId, 
       int edgeFlags, 
       int source, 
       int flags) 

먼저 당신이 위의 obtain 변화를 사용해야합니다 MotionEvent.ACTION_POINTER_DOWN을 시뮬레이션하려고합니다 첫 번째 (당신이 한 정확히처럼) 손가락과 때를위한 이벤트를 전달합니다.

필드 매우 자명는 상기 PARAMS가 확인 같다 : secondFingerPointerCoords, firstFingerPointerCoords]

  1. pointerCount = 2
  2. pointerProperties = firstFingerPointerProperties, secondFingerPointerProperties]
  3. pointerCoords의 =
1

Documentation 다음과 같이 말합니다 : "제스처는 첫 번째 포인터의 위치를 ​​제공하는 ACTION_DOWN으로 모션 이벤트로 시작됩니다. 아래로 또는 위로 이동하는 추가 포인터가있을 때마다 프레임 워크는 ACTION_POINTER_DOWN 또는 ACTION_POINTER_UP을 사용하여 모션 이벤트를 생성합니다 . " 그래서 처음에는 간단한 터치 이벤트가 필요합니다. 그리고 this 질문을보십시오. >ACTION_POINTER_DOWN - -> 옵션으로 약간의 지연 ->ACTION_POINTER_UP ->ACTION_UPACTION_DOWN :

+0

감사합니다. @ Andriy –

+0

이 나를 위해 작동하지 않는지 확인합니다. –

+0

@SyedaZunairah 어떤 코드를 사용해 보셨습니까? 'ACTION_DOWN' ->'ACTION_POINTER_DOWN' -> 선택적으로 작은 지연 ->'ACTION_POINTER_UP' ->'ACTION_UP'과 같은 순서로 시도해야합니다. – user1643723

1

는이 같은 시퀀스를 생성한다.

두 번째 포인터에 대해 포인터 인덱스 (및 기타 메타 데이터)를 올바르게 설정해야합니다. 그렇지 않으면 제스처 감지 코드가 보조 프레스가 기본이 아닌 보조 손가락을 나타내는 것으로 ACTION_POINTER_DOWN을 알 수 없기 때문입니다.

this method을 사용하면 두 번째 누를 설명하는 ACTION_POINTER_DOWN에 필요한 모든 정보를 입력 할 수 있습니다. pointerProperties이 맞는지 확인하십시오!