리눅스 & 안드로이드2011. 12. 1. 20:04
안드로이드 Activity의 onTouchEvent에서 pinch zoom in&out을 구현하는 방법은 다음과 같다.

@Override

public boolean onTouchEvent(MotionEvent event) {

final int pointerCount = event.getPointerCount();

final int actionMasked = event.getActionMasked();


if (pointerCount == 2 && actionMasked == MotionEvent.ACTION_MOVE) {

final float distX = event.getX(1) - event.getX(0);

final float distY = event.getY(1) - event.getY(0);

final float distance = (float) Math.sqrt(distX * distX + distY * distY);

float diff = 0;


if (mLastDistance == Float.MIN_VALUE) {

mLastDistance = distance;

} else {

diff = distance - mLastDistance;

mLastDistance = distance;

}


return true;

} else if (actionMasked == MotionEvent.ACTION_POINTER_UP) {

mLastDistance = Float.MIN_VALUE;

}

}


diff 에 MotionEvent.ACTION_MOVE 이벤트 마다, 실제 pinch gesture에 의해 변환된 차이가 저장된다.
이 값을 이용하여 적절히 활용하면 된다.

실제 거리가 아닌 비율이 필요하다면, 제곱근 연산을 제거할 수 도 있겠다.

Posted by 세월의돌