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

안드로이드 onTouchEvent와 그리기 관련 질문 ...

0 추천

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이벤트 발생 시 이미지 영역이 캔버스 안에 있다면 따로 저장해놓은값을 다시 새로 갱신해 주고,

영역 밖으로 튀어나갔다면 해당 좌표만 다시 이전값으로 바꿔줌으로써 이동하지 않는것처럼 보이게 하려고 했는데

생각처럼 잘 안됩니다.

 

제가 설명을 잘 못해서 이해가 되실지 모르겠습니다만, 

 

도움 애타게 기다리겠습니다.

음무 (17,820 포인트) 님이 2013년 12월 18일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...