public class Touch extends Activity implements OnTouchListener {
private static final String TAG = "Touch";
Matrix matrix = new Matrix();
private Matrix savedMatrix = new Matrix();
private Matrix savedMatrix2 = new Matrix();
static final int NONE = 0;
static final int DRAG = 1;
int mode = NONE;
private PointF start = new PointF();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView view = (ImageView) findViewById(R.id.imageView);
view.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
Log.d(TAG, "mode=DRAG");
mode = DRAG;
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
Log.d(TAG, "mode=NONE");
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// ...
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x, event.getY()
- start.y);
}
break;
}
view.setImageMatrix(matrix);
return true; // indicate event was handled
}
}
----------------------
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="matrix"
android:src="@drawable/butterfly" >
</ImageView>
</FrameLayout>
안녕하세요.
어제 질문을 올렸는데 해결되지 않은 부분이 있어 다시 질문 올립니다.
matrix를 이용해서 이미지뷰를 드래그해서 이동하는 로직을 구현하였는데 디스플레이 화면 밖으로 이미지뷰가 이동하는것을 제한하고 싶습니다.
이미지뷰의 각 모서리 좌표를 구해서 0보다 작거나 화면의 크기보다 커지면 이동하지 않도록 구현을 하고 싶은데
저는 이미지뷰 좌표를 구하기 힘들더라구요.....view.getLeft, getRigth, getTop, getBottom으로 구하면 처음 위치만 출력되고 변하는 위치는 출력이 되지 않았습니다..
혹시 드래그해서 이동되는 실시간 좌표를 구할 수 있는 방법이 있나요?
아니면 다른 방법이라도...도움 주시면 감사하겠습니다!