안드로이드 개발 정보
(글 수 1,067)
----------------------------------------------------------------------
문제있는 소스 고쳐서 올렸습니다. pc로 터치 좌표
찍으면서 태스트 해봤는데 잘 되는 것 같네요
-----------------------------------------------------------------------
멀티터치 관련 구현하면서 이것 저것 봤는데..
솔직히 좀 난해하더라구요. 뭐 크게 어려운건 아니지만 개념적으로도 그렇고..
별로 대단한 것도 아닌데 상당히 귀찮길래 대충 정리 해서 올립니다.
4개의 변수가 있는데 주석처리 해 놓은 부분에서 관리 하시는 상태처리를 하시면 됩니다.
안드로이드에 맞춰서 개발하기 보단 게임에서 쓸 터치이기 때문에 그냥 처리 했습니다.
자바 잘 못하기 때문에 어색할 수도 있습니다.
대충 설명하면 터치 식별자는 0~멀티터치 가능 수 ( 모릅니다. 적당히 정해서 쓰시길 )
상태변수나 뭐 적당한 처리 만드시고 PUSH가 눌렸을 때 MOVE가 움직일때(드래그)
POP은 오는 순간이 띈거고 띄고 나서도 POP 입니다. 이 부분은 상태 처리 하실 때 적절히 해주세요.
대단한 처리가 아니라 원하는 정보만 주는 것입니다. 궁금하면 덧글 남겨 주세요~
static final int MODE_TOUCH_PUSH = 0, MODE_TOUCH_MOVE = 1, MODE_TOUCH_POP = 2, INVALID_POINTER_ID = -1, SIZE_TOUCH_PACKET = 20; public boolean onTouchEvent(final MotionEvent event) { int action = event.getAction(); int touch_id; //터치 식별용 int touch_mode; //터치 상태, 디폴트로 MODE_TOUCH_POP로 해놓고 쓰시면 됩니다. int x,y; //터치 좌표 switch( action & MotionEvent.ACTION_MASK ){ case MotionEvent.ACTION_DOWN: { touch_id = event.getPointerId(0); touch_mode = MODE_TOUCH_PUSH; x = (int)event.getX(); y = (int)event.getY(); //위 정보를 원하는데로 사용하세요. break; } case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP:{ touch_id = event.getPointerId(0); touch_mode = MODE_TOUCH_POP; x = (int)event.getX(); y = (int)event.getY(); //위 정보를 원하는데로 사용하세요. break; } case MotionEvent.ACTION_MOVE:{ for(int i=0;i<event.getPointerCount();++i){ int pointer_id = event.findPointerIndex(i); if( pointer_id == INVALID_POINTER_ID ) continue; touch_id = i; touch_mode = MODE_TOUCH_MOVE; x = (int)event.getX(); y = (int)event.getY(); //위 정보를 원하는데로 사용하세요. } break; } case MotionEvent.ACTION_POINTER_DOWN:{ int pointer_index = (action & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; int pointer_id = event.getPointerId(pointer_index); if( pointer_id != INVALID_POINTER_ID ){ touch_id = pointer_index; touch_mode = MODE_TOUCH_PUSH; x = (int)event.getX(pointer_id); y = (int)event.getY(pointer_id); //위 정보를 원하는데로 사용하세요. } break; } case MotionEvent.ACTION_POINTER_UP:{ int pointer_index = (action & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; int pointer_id = event.getPointerId(pointer_index); if( pointer_id != INVALID_POINTER_ID ){ touch_id = pointer_index; touch_mode = MODE_TOUCH_POP; x = (int)event.getX(pointer_id); y = (int)event.getY(pointer_id); //위 정보를 원하는데로 사용하세요. } break; } default: break; } return true; }

핀치줌잉인가 그걸로 구현했는데 2.2에서만 되더라고요.
갤스만 2.2로 해주면 버전걱정 안해도 될텐데 흐흐