마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이미지뷰 드래그하여 이동할 때 화면밖으로 못나가게 어떻게 하나요?

0 추천
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를 이용해서 이미지뷰를 드래그하여 화면에서 이동되게 구현했는데요.

이때 드래그해도 이미지가 화면밖으로는 이동되지 않게 어떻게 구현해야될까요....

아시는분 도움주시면 감사하겠습니다!

익명사용자 님이 2014년 9월 11일 질문

1개의 답변

0 추천
MotionEvent.ACTION_MOVE 아래에 에 코드를 추가하시면 될것 같아요..

<조건>

이미지의 x 좌표는 0보다 작을 수 없다.

이미지의 y좌표는 0보다 작을 수 없다.

이미지의 x+width 는 화면의 width를 넘을 수 없다.

이미지의 y+height 는 화면의 hight 를 넘을 수 없다.

if ( image.x > 0 && image.y > 0 && image.x+width < screen.width && image.y+heght < sceen.height ) {

   // 이동

}

참고하시고 않되면.. ㅠㅠ
Yong-Yong (3,500 포인트) 님이 2014년 9월 11일 답변
...