if (event.getAction() == MotionEvent.ACTION_MOVE) {
int size = MainActivity.ARR_X.size();
if (touch_flag == 3) {
copyArrX.clear();
copyArrY.clear();
copyArrX.addAll(MainActivity.ARR_X);
copyArrY.addAll(MainActivity.ARR_Y);
if(imgX <= 0 && imgY <= 0 && imgX >= -700 && imgY >= -700) { //이미지 위치
//이미지가 캔버스를 벗어나지 않았을 때
diffX = (event.getX() - saveX); //MOVE 검출간 이동량
diffY = (event.getY() - saveY);
sMoveX += diffX; // 이동 총 량
sMoveY += diffY;
saveX = event.getX();
saveY = event.getY();
imgX = imgX + diffX;
imgY = imgY + diffY;
copyArrX.clear();
copyArrY.clear();
copyArrX.addAll(MainActivity.ARR_X);
copyArrY.addAll(MainActivity.ARR_Y);
}
//이미지 위치 보정 후 새로그림
if (imgX > 0) {
imgX = 0;
Log.d("fureun", "imgX가 0보다 큼");
MainActivity.ARR_X.clear();
MainActivity.ARR_X.addAll(copyArrX);
}
if (imgX < -700) {
imgX = -700;
Log.d("fureun", "imgX가 -700보다 작음");
MainActivity.ARR_X.clear();
MainActivity.ARR_X.addAll(copyArrX);
}
if (imgY > 0) {
imgY = 0;
Log.d("fureun", "imgY가 0보다 큼");
MainActivity.ARR_Y.clear();
MainActivity.ARR_Y.addAll(copyArrX);
}
if (imgY < -700) {
imgY = -700;
Log.d("fureun", "imgY가 -700보다 작음");
MainActivity.ARR_Y.clear();
MainActivity.ARR_Y.addAll(copyArrX);
}
doDraw();
}
}
위의 소스코드는 MOVE 이벤트 발생 시 배경이미지와 그위에 그려져있는 Circle의 위치를 변경시키기 위한 소스입니다.
쉽게말해 드래그를 구현한것인데요
배경이미지가 캔버스 영역 밖으로 나가게 하지 않기 위해 범위를 설정해주고 그 밖으로 나가면 0,0 또는 -700, -700 위치로 새로 그려주고 있습니다.
실제로는 계속 튀어나가고 있지만 튀어 나갔을 경우 이미지 위치를 새로 설정해서 새로 그려주기때문에
튀어나가지 않는것처럼 보입니다.
그런데 문제는 Circle입니다. 써클의 좌표는 ARR_X와 ARR_Y라는 List에 저장되어 있습니다.
저는 DOWN이벤트에서 ARR_X와 ARR_Y의 값을 따로 저장해 놓은 뒤,
MOVE이벤트 발생 시 이미지 영역이 캔버스 안에 있다면 따로 저장해놓은값을 다시 새로 갱신해 주고,
영역 밖으로 튀어나갔다면 해당 좌표만 다시 이전값으로 바꿔줌으로써 이동하지 않는것처럼 보이게 하려고 했는데
생각처럼 잘 안됩니다.
제가 설명을 잘 못해서 이해가 되실지 모르겠습니다만,
도움 애타게 기다리겠습니다.