레이아웃에서 이미지를 화면에 꽉차게 만들었는데요.
자바코드에서 이미지를 확대 축소 이동이 가능하게 해봤는데 확대를 하고나니까 예를들어 확대를해서 이미지의 하단을 확대했다면 확대된 부분을 제외한 모든 부분이 잘려 없어져버리네요. 더 정확히 말씀드리자면 축소하게되면 정상적으로 돌아오기는하는데 확대후에 다른곳을 볼 수 없다는게 좀 그래서요 .. 소스코드를 첨부하는데 이건 구글링을 통해 모아서 제가 조금 수정해본 소스입니다.. 어느쪽에 문제가 있는지 충고 부탁드리겠습니다...
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: // first finger down only
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
oldXvalue = event.getX();
oldYvalue = event.getY();
// Log.i("Tag1", "Action Down X" + event.getX() + "," + event.getY());
Log.i("Tag1", "Action Down rX " + event.getRawX() + "," + event.getRawY());
mode = DRAG;
break;
case MotionEvent.ACTION_UP: // first finger lifted
if (v.getX() > width && v.getY() > height) {
v.setX(width);
v.setY(height);
} else if (v.getX() < 0 && v.getY() > height) {
v.setX(0);
v.setY(height);
} else if (v.getX() > width && v.getY() < 0) {
v.setX(width);
v.setY(0);
} else if (v.getX() < 0 && v.getY() < 0) {
v.setX(0);
v.setY(0);
} else if (v.getX() < 0 || v.getX() > width) {
if (v.getX() < 0) {
v.setX(0);
v.setY(event.getRawY() - oldYvalue - v.getHeight());
} else {
v.setX(width);
v.setY(event.getRawY() - oldYvalue - v.getHeight());
}
} else if (v.getY() < 0 || v.getY() > height) {
if (v.getY() < 0) {
v.setX(event.getRawX() - oldXvalue);
v.setY(0);
} else {
v.setX(event.getRawX() - oldXvalue);
v.setY(height);
}
}
case MotionEvent.ACTION_POINTER_UP: // second finger lifted
mode = NONE;
Log.d(TAG, "mode=NONE");
break;
case MotionEvent.ACTION_POINTER_DOWN: // first and second finger down
oldDist = spacing(event);
Log.d(TAG, "oldDist=" + oldDist);
if (oldDist > 5f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
Log.d(TAG, "mode=ZOOM");
}
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); // create the transformation in the matrix of points
v.setX(event.getRawX() - oldXvalue);
v.setY(event.getRawY() - oldYvalue);
} else if (mode == ZOOM) {
// pinch zooming
float newDist = spacing(event);
Log.d(TAG, "newDist=" + newDist);
if (newDist > 5f) {
matrix.set(savedMatrix);
scale = newDist / oldDist; // setting the scaling of the
// matrix...if scale > 1 means
// zoom in...if scale < 1 means
// zoom out
matrix.postScale(scale, scale, mid.x, mid.y);
}
view.setImageMatrix(matrix);
}
break;
}
return true;