2012-07-23 4 views
1

내 활동에서 제스처를 처리하고 싶습니다. 이렇게하려면 내 Activity에서 public boolean onTouchEvent (MotionEvent MEvent) 메서드를 재정의 (override)해야합니다. 내용은 다음과 같습니다안드로이드 - 첫 번째 포인터와 두 번째 포인터를 구별하는 방법 onTouchEvent

motionaction = MEvent.getAction(); 

if(motionaction == MotionEvent.ACTION_DOWN) 
{ 
    ... 
    return true; 
} 

if(motionaction == MotionEvent.ACTION_UP) 
{ 
    ... 
    return true; 
} 

if(motionaction == MotionEvent.ACTION_MOVE) 
{ 
    ... 
    return true; 
} 

motionaction = MEvent.getActionMasked(); 

if(motionaction == MotionEvent.ACTION_POINTER_DOWN) 
{ 
    ... 
    return true; 
} 

if(motionaction == MotionEvent.ACTION_POINTER_UP) 
{ 
    ... 
    return true; 
} 

return true; 

제스처는 다음과 같습니다 (항상 약간의 움직임이 거의 때문에) 화면에

-finger1이 위치를 보유하고있는에

-finger2 이동 화면. 이것은 내가 움켜 잡고 자하는 운동입니다.

나는 5 가지 행동을 취할 수 있지만 두 손가락이 화면에있을 때 ACTION_MOVE가 첫 번째 및 두 번째 손가락의 움직임을 잡는 것이 문제입니다. MEvent.getActionIndex()은 항상 0 인 ACTION_MOVE에 대해 작동하지 않습니다. 내가 할 수있는 유일한 방법은 finger1의 위치를 ​​저장하고 그 지점 근처에서 움직임을 버리는 것입니다. 결과적으로 손가락의 움직임이 완벽하지는 않습니다. 손가락이 손가락의 움직임을 감지 할 수는 있지만, 청자는 최소한의 움직임을 느낄 수 있기 때문에 작은 손가락 움직임에 의해 "오염되었습니다".

어떻게 개선 할 수 있습니까?

답변

0

개발자로 귀하가 관리합니다. "DOWN"동작이 일어 났을 때 (true로) 설정하고 "UP"또는 "MOVE"motionevent가 발생할 때 설정을 해제 (false)하기 위해 부울 변수를 만들어야합니다. 아래의 코드에서 "DOWN"이 발생할 때도 좌표를 유지하고 사용자가 이동하는 동안 조정합니다.

switch (e.Action) //e is a MotionEvent type 
{ 
    case MotionEvent.ACTION_DOWN: 
    {       
     _prevx = e.getX(); 
     _prevy = e.getY(); 
    } 
    break; 
    case MotionEvent.ACTION_MOVE: 
    { 
     _xoffset += e.GetX() - _prevx; 
     _yoffset += e.GetY() - _prevy; 
     Invalidate(); 

     _prevx = e.GetX(); 
     _prevy = e.GetY(); 
    } 
    break; 
} 

당신은 당신이 ScaleGestureDetector.OnScaleGestureListener를 구현해야 드래그 멀티 손가락을 수행 할 경우 (http://developer.android.com/reference/android/view/ScaleGestureDetector.OnScaleGestureListener.html)

1

Quintin Balsdon의 대답을 참고하십시오 :

나는 내 코드에서 비슷한 점을 가지고 있습니다. 나는 ACTION_DOWN의 경우에 finger1의 위치를 ​​저장하고, 그 다음에 finger2가 움직일 때 Y의 이동 좌표가 저장된 finger1의 Y 좌표보다 큰지 확인합니다. 그렇다면 finger2로 참조 된 움직임은 finger1로 참조되고 두 손가락 모드에서는 무시됩니다.

나는 이런 식으로 뭔가를 가지고 한 손가락으로 모드에서 내보기에 원을 그리려고하면 : 내가 두 손가락 모드에서 내보기에 원을 그리려고하면 http://img208.imageshack.us/img208/8113/onefingercircle.jpg

내가 좋아하는 뭔가를 가지고있다 이 : http://img256.imageshack.us/img256/6778/twofingercircle.jpg

한 손가락 모드에서는 완벽하게 작동하지만 두 손가락 모드에서는 작동하지 않습니다. 전화 멀티 터치 핸들러 또는 터치 스크린과 관련이 있는지 알 수 없습니다. 하드웨어와 관련되거나 API에 대한 오해 일 수 있습니다.

관련 문제