2013-11-25 2 views
0

현재 첫 번째 멀티 터치 Android 응용 프로그램에서 작업 중이며 onTouchEvent()에 어려움을 겪고 있습니다. 나는 온라인 자습서에서 화면의 각 터치에 대한 올바른 포인터 ID 정보를 제공하는 코드를 사용했지만 ACTION_POINTER_DOWN 이벤트의 이벤트 좌표는 항상 초기 터치의 좌표와 같아 보입니다. 내 코드는 다음과 같습니다 : 로그, 내 포인터의 X 위치가 표시되는 경우, 당신은 내가 화면 (포인터 번호 1)에 추가로 터치를 추가 할 때 X 좌표를 볼 수 있습니다에서 onTouchEvent가 여러 포인터에 대해 동일한 좌표를 반환합니다.

private int getIndex(MotionEvent event) { 
      int idx = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; 
      return idx; 
} 

@Override 

public boolean onTouchEvent(MotionEvent event) { 
     int action = event.getAction() & MotionEvent.ACTION_MASK; 
     switch(action) { 
       case MotionEvent.ACTION_DOWN : { 
         int id = event.getPointerId(0); 
         Log.d("CV", "Point number " +id+ " is down at X value " +event.getX()); 
         callbackListener.onTouchDown(event, id); 
         break; 
       } 
       case MotionEvent.ACTION_MOVE : { 
         int touchCounter = event.getPointerCount(); 
         for (int t = 0; t < touchCounter; t++) { 
           int id = event.getPointerId(t); 
           callbackListener.onMove(event, id); 
         } 
         break; 
       } 
       case MotionEvent.ACTION_POINTER_DOWN : { 
         int id = event.getPointerId(getIndex(event)); 
         Log.d("CV", "Point number " +id+ " is down at X value " +event.getX()); 
         callbackListener.onTouchDown(event, id); 
         break; 
       } 
       case MotionEvent.ACTION_POINTER_UP : { 
         int id = event.getPointerId(getIndex(event)); 
         //Log.d("CV", "Other point up ["+id+"]"); 
         callbackListener.onTouchUp(event, id); 
         break; 
       } 
       case MotionEvent.ACTION_UP : { 
         int id = event.getPointerId(0); 
         //Log.d("CV", "Pointer up ["+id+"]"); 
         callbackListener.onTouchUp(event, id); 
         break; 
       } 
     } 
     return true; 
} 

이 동일하다 첫 번째 터치 (포인터 번호 0) ...

11-25 12:34:02.911: D/CV(25231): Point number 0 is down at X value 260.60608 
11-25 12:34:05.281: D/CV(25231): Point number 0 is down at X value 477.57578 
11-25 12:34:06.261: D/CV(25231): Point number 0 is down at X value 581.8182 
11-25 12:34:11.891: D/CV(25231): Point number 0 is down at X value 267.87878 
11-25 12:34:13.321: D/CV(25231): Point number 1 is down at X value 267.87878 

내가 꽤 많이 복사 및 온라인 자습서에서 전체 일을 붙여 넣은 것처럼이 나를 실망하고이 제대로 작동하지 않을 이유가 볼 수 없습니다! 당신이 상상할 수있는 또한,는 ACTION_MOVE 감사

답변

1

이것은,

어떤 도움

이 많이 감사합니다 ... 제대로 중 하나를 작동하지 않습니다 때문에 first 포인터 인덱스 event.getX() 반환 값은. 당신은 사용해야

, getX(int pointerIndex) 다음과 같이 :

Log.d("CV", "Point number " +id+ " is down at X value " +event.getX(getIndex(event))); 
+0

덕분에 너무,이 일! 내 두 번째 손가락 만 움직이면 ACTION_MOVE 로그에서 포인터 번호 0과 1이 모두 움직이는 이유를 알 수 있습니까? – ktechkez

관련 문제