2011-07-05 4 views
4

mutlitouch 이벤트에서 X 및 Y 값을 가져 오는 데 문제가 있습니다. 다음은 POINTER_DOWN 및 POINTER_UP 이벤트가 발생했을 때 값을 얻는 방법을 보여주는 코드입니다. 그러나 X 및 Y 값은 POINTER_UP 이벤트에서 혼합/중복되는 것처럼 보입니다. 더 그 값의 ID를 대신 2Android 멀티 터치가 잘못된 포인터 및/또는 XY 값을 가져옴

주를 보여주는, 여기

E/DOWN (25070): 0 279.60922 279.17447 
E/DOWN (25070): 1 513.20044 520.3252 
E/DOWN (25070): 2 422.6651 358.72418 

E/UP  (25070): 0 279.60922 279.17447 
E/UP  (25070): 1 422.6651 358.72418 
E/UP  (25070): 2 422.6651 358.72418 

당신이 ID 1의 XY 위치가 잘못된 것을 볼 수 있습니다

@Override 
public void onTouchEvent(MotionEvent event) { 

int id, pointerIndex; 

switch (event.getAction() & MotionEvent.ACTION_MASK) { 

    case MotionEvent.ACTION_POINTER_DOWN: 

    pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) 
    >> MotionEvent.ACTION_POINTER_ID_SHIFT; 
    id = event.getPointerId(pointerIndex); 

    Log.e("Down", ""+id+" "+event.getX(id)+" "+event.getY(id)); 

    break; 

case MotionEvent.ACTION_POINTER_UP: 

    pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) 
    >> MotionEvent.ACTION_POINTER_ID_SHIFT; 
    id = event.getPointerId(pointerIndex); 

    Log.e("UP", ""+id+" "+event.getX(id)+" "+event.getY(id)); 

    break; 
} 

super.onTouchEvent(event); 

} 

이 일반적으로 다음 롤캣 결과 ACTION_CANCEL 이벤트가 호출됩니다. 나는 MASKS/ANDing을 사용하는 것이 잘못된 것이라고 생각합니다. 어떤 도움을 많이 주시면 감사하겠습니다!

+0

디바이스? OS 버전? –

+1

이 문제는 잘못된 pointerIndex로 getX와 getY를 호출하는 것에 대한 3.1의 변경으로 인해 발생했습니다. pointerIndex 대신 pointerId를 사용하고 있었기 때문에 충돌이 발생했습니다 (아래 답변 덕분에 알 수 있습니다). – stealthcopter

답변

4

은 분명히 event.getX 및 event.getY 포인터 인덱스이 아닌 포인터 ID을 공급해야한다.

관련 문제