안드로이드 개발 질문/답변
(글 수 45,052)
이미지 뷰로 띄운 이미지를 롱터치하면 손가락 따라 이동하게 구현을 했습니다.
img = (ImageView)findViewById(R.id.img); img.setOnTouchListener(touchListener); img.setOnLongClickListener(longClickListener);
이렇게 이미지뷰에 롱클릭리스너와 터치 리스너를 달아놨구요
View.OnLongClickListener longClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(ImageDragActivity.this, "Long Click", Toast.LENGTH_SHORT).show();
if(selectImage == null){
// 터치하면 터치한 뷰와 터치좌표를 저장한다.
selectImage = (ImageView)v;
selX = preX = x;
selY = preY = y;
return true;
}
img.setOnTouchListener(touchListener);
return true;
}
};
롱클릭리스너에 터치한 뷰와 좌표를 저장하게 하고 터치 리스너를 넣어주었습니다.
View.OnTouchListener touchListener = new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
x = (int)event.getX();
Log.e("tag", "x"+x);
y = (int)event.getY();
Log.e("tag", "y"+y);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
img.setOnLongClickListener(longClickListener);
break;
case MotionEvent.ACTION_MOVE:
if(selectImage == (ImageView)v){
dx = x - selX;
dy = y - selY;
selectImage.layout(selectImage.getLeft() + dx, selectImage.getTop() + dy,
selectImage.getRight() + dx, selectImage.getBottom() + dy);
preX = x;
preY = y;
return true;
}
break;
case MotionEvent.ACTION_UP:
if(selectImage != null){
selectImage = null;
return true;
}
break;
}
return false;
}
};
그리고 터치 리스너에 이미지 이동을 구현해두었습니다.
이미지를 터치 해서 손가락을 따라 이동 하다가 화면 경계에 닿으면 화면 밖으로
이미지가 나가지 않고 그 자리에 있게 하고 싶은데 어떻게 구현을 해야할까요?
x y 를 로그로 찍어봤더니 이미지 내의 터치한 위치 좌표만 나왔습니다.




터치 포인트의 값이 이미지의 너비(높이)의 절반 크기 보다 작으면 이미지를 움직이지 않게 하시면 되죠.
예를 들어 화면 크기가 480x800이고 이미지 크기가 40x40이면
터치 포인드가 (x<=20, y<=20), (x>=459, y>=779)일 때, 즉 네 방향에 대한 터치 포인트만 확인하는 구문만 들어가면
벗어나지 않을 겁니다.