안녕하세요~ 

제가 글을 잘 못써서인지 답변주시는 분이 없네요.

안드로이드 고수분들 좀 도와주시기 바랍니다.


가로 세로 스크롤, 멀티터치 가능 확대 축소 기능 어플 구현중입니다.

뭐 그런 기능은 일단 어렵지 않는데요...


확대축소를 하느라고 일단 아래와 같이 터치 함수를 정의했습니다.


public boolean onTouch(View v, MotionEvent event) {

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

case MotionEvent.ACTION_DOWN: // 터치일때

nvScroll = (int)(event.getRawX()); // 가로 세로 스크롤을 위한 처리입니다.

nhScroll = (int)(event.getRawY());

break;

case MotionEvent.ACTION_UP:

case MotionEvent.ACTION_POINTER_UP:

mode = NONE; // 터치를 놓았을때 확대인가 축소인가를 가르는

break; // mode 라는 변수를 none 으로 설정해줍니다.

case MotionEvent.ACTION_MOVE:

if (mode == ZOOM) { // 터치후 움직일때는요 mode ( 확대인가 ) 변수가

float newDist = mainMap.spacing(event); // Zoom ( 확대 ) 일때 

if (newDist > 10f) { // 지금 보시는 코드처럼

float scale = newDist / oldDist; // 확대 하려는 크기를 계산합니다.

mainMap.size_x = scale; // oldDist : 두손가락으로 터치했을때 거리

mainMap.size_y = scale; // newDist : 터치후 움직일때 두 손가락의 거리

mainMap.drawBackGround(); // 이해 되시죠? 확대 크기는 scale 입니다.

mainMap.invalidate();

}

}

else {

int nX=0, nY=0; // 확대가 아니라면 그저 스크롤처리만 해줍니다.

nX = (int)(event.getRawX());

nY = (int)(event.getRawY());

scrollBy(nvScroll-nX, nhScroll-nY);

nvScroll = nX;

nhScroll = nY;

}

break;

case MotionEvent.ACTION_POINTER_DOWN:

if (mode == NONE) {

oldDist = mainMap.spacing(event); // 여기가 바로 두 손가락으로 터치 했을때입니다.

if (oldDist > 10f) {

mode = ZOOM;

}

}

break;

default:

nvScroll = (int)event.getRawX(); // 나머지 사건들에서는 확대변수를 None 으로

nhScroll = (int)event.getRawY(); // 설정합니다. 확대를 하지 못하게 하려구요...

mode = NONE;

break;

}

nvScroll = (int)event.getRawX();

nhScroll = (int)event.getRawY();

return true;

}

};


위의 코드를 보셨죠?

근데 실행해보니 이미지 확대축소가 ipod 에서 처럼 그렇게 멋지게 안되는겁니다.

제일 난 문제는요 멀티 터치하고 손가락을 움직여 이미지를 확대한후에 터치 했던 손을 놓으면

MotionEvent.ACTION_POINTER_UP:

사건에 들어오지 않는다는겁니다.


왜서 이런일이 있는건지 아시는 고수분들 좀 도와주세요...

그리구 확대 축소를 멋지게 할수 있는 방법 좀 가르쳐 주세요.