이미지 뷰로 띄운 이미지를 롱터치하면 손가락 따라 이동하게 구현을 했습니다.

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 를 로그로 찍어봤더니 이미지 내의 터치한 위치 좌표만 나왔습니다.