멀티터치를 이용하여 이미지를 확대하고 축소하고 싶습니다. 아무리 찾아봐도 Matrix 클래스 setImageMatrix를 이용하라고만 나와있는데
이것을 어떻게 이용해야하고 이것이 맞는건지도 잘모르겠네요 ㅠ api를 찾아봐도 여기에 대한 설명은 별로없고 ㅜ 고수님들 알려주세요..
Matrix matrix = new Matrix();
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
// 드래그시 좌표 저장
int posX1=0, posX2=0, posY1=0, posY2=0;
// 핀치시 두좌표간의 거리 저장
float oldDist = 1f;
float newDist = 1f;
public boolean onTouchEvent(MotionEvent event) {
ImageView boo=(ImageView)findViewById(R.id.boo);
int act = event.getAction();
String strMsg = "";
switch(act & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: //첫번째 손가락 터치(드래그 용도)
posX1 = (int) event.getX();
posY1 = (int) event.getY();
Log.d("zoom", "mode=DRAG" );
mode = DRAG;
break;
case MotionEvent.ACTION_MOVE:
if(mode == DRAG) { // 드래그 중
posX2 = (int) event.getX();
posY2 = (int) event.getY();
if(Math.abs(posX2-posX1)>20 || Math.abs(posY2-posY1)>20) {
posX1 = posX2;
posY1 = posY2;
strMsg = "drag";
Toast toast = Toast.makeText(this, strMsg, Toast.LENGTH_SHORT);
toast.show();
}
} else if (mode == ZOOM) { // 핀치 중
newDist = spacing(event);
Log.d("zoom", "newDist=" + newDist);
Log.d("zoom", "oldDist=" + oldDist);
if (newDist - oldDist > 20) { // zoom in
oldDist = newDist;
matrix.postScale(posX1, posY1, posX2, posY2);
boo.setImageMatrix(matrix);
setContentView(R.layout.boo);
strMsg = "zoom in";
Toast toast = Toast.makeText(this, strMsg, Toast.LENGTH_SHORT);
toast.show();
} else if(oldDist - newDist > 20) { // zoom out
oldDist = newDist;
matrix.postScale(posX1, posY1, posX2, posY2);
boo.setImageMatrix(matrix);
setContentView(R.layout.boo);
strMsg = "zoom out";
Toast toast = Toast.makeText(this, strMsg, Toast.LENGTH_SHORT);
toast.show();
}
}
break;
case MotionEvent.ACTION_UP: // 첫번째 손가락을 떼었을 경우
case MotionEvent.ACTION_POINTER_UP: // 두번째 손가락을 떼었을 경우
mode = NONE;
break;
case MotionEvent.ACTION_POINTER_DOWN:
//두번째 손가락 터치(손가락 2개를 인식하였기 때문에 핀치 줌으로 판별)
mode = ZOOM;
newDist = spacing(event);
oldDist = spacing(event);
Log.d("zoom", "newDist=" + newDist);
Log.d("zoom", "oldDist=" + oldDist);
Log.d("zoom", "mode=ZOOM");
break;
case MotionEvent.ACTION_CANCEL:
default :
break;
}
return super.onTouchEvent(event);
}
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}




http://90000e.tistory.com/
여기에 잘 나와있습니다~