총 게시물 39,205건, 최근 2 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

ImageView 터치 이동 질문드립니다 ㅜㅜ

글쓴이 : NullPointException 날짜 : 2018-07-27 (금) 11:13 조회 : 1178
글주소 : http://www.androidside.com/B49/170168
 
  IMAGE, 셔터스톡
시즈널 이미지, 일러스트, 패턴 등 작업에 필요한 모든 이미지. 지금 검색하세요!
www.shutterstock.com/
  스타일어닝IMAGE
어닝,코니탑,바네트,아스테이지 제작 시공전문,경기도 어닝시공IMAGE
styleawning.co.kr
  자기계발추천도서 티몬
자기계발추천도서, 어린이부터 성인까지 분야별 인기.유명도서 할인! 빠른배송!
www.ticketmonster.co.kr
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

질문.png


이렇게 있는데요. 이미지뷰를 터치해서 끌고 다니면 원하는 위치에 그림이 놓일수 있도록하는건데 약간 문제가 있어서요 .. 

이미지를 이동하는 소스는 구글링을 통해서 가져왔는데요.

이게 이미지뷰 영역이아니고 레이아웃 영역을 끌어도 이미지가 움직이더라구요 ..

소스에서 어떤 부분을 수정해야할까요 ..

@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
view.setScaleType(ImageView.ScaleType.MATRIX);
float scale;
dumpEvent(event);
// Handle touch events here...

switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN: // first finger down only
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
Log.d(TAG, "mode=DRAG"); // write to LogCat
mode = DRAG;
break;

case MotionEvent.ACTION_UP: // first finger lifted

case MotionEvent.ACTION_POINTER_UP: // second finger lifted
mode = NONE;
Log.d(TAG, "mode=NONE");
break;
case MotionEvent.ACTION_POINTER_DOWN: // first and second finger down
oldDist = spacing(event);
Log.d(TAG, "oldDist=" + oldDist);
if (oldDist > 5f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
Log.d(TAG, "mode=ZOOM");
}
break;

case MotionEvent.ACTION_MOVE:
if (mode == DRAG)
{
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); // create the transformation in the matrix of points
}
else if (mode == ZOOM)
{
// pinch zooming
float newDist = spacing(event);
Log.d(TAG, "newDist=" + newDist);
if (newDist > 5f)
{
matrix.set(savedMatrix);
scale = newDist / oldDist; // setting the scaling of the
// matrix...if scale > 1 means
// zoom in...if scale < 1 means
// zoom out
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}

view.setImageMatrix(matrix); // display the transformation on screen

return true; // indicate event was handled
}
==================================================================================

private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return (float)Math.sqrt(x * x + y * y);
}


private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}

private void dumpEvent(MotionEvent event)
{
String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE","POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };
StringBuilder sb = new StringBuilder();
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
sb.append("event ACTION_").append(names[actionCode]);

if (actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_POINTER_UP)
{
sb.append("(pid ").append(action >> MotionEvent.ACTION_POINTER_ID_SHIFT);
sb.append(")");
}

sb.append("[");
for (int i = 0; i < event.getPointerCount(); i++)
{
sb.append("#").append(i);
sb.append("(pid ").append(event.getPointerId(i));
sb.append(")=").append((int) event.getX(i));
sb.append(",").append((int) event.getY(i));
if (i + 1 < event.getPointerCount())
sb.append(";");
}

sb.append("]");
Log.d("Touch Events ---------", sb.toString());
}


잘부탁드립니다 ㅜㅜ



질문자가 자신의 포인트 5 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 4을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

안사 이쁜이 2018-07-27 (금) 11:13
축하드립니다. ;)
NullPointException님은 안사 이쁜이에 당첨되어 3 포인트 지급되었습니다.
OSKiller 2018-07-27 (금) 11:38
액티비티나 프레그먼트에서 구현 한거라면 당연히 어디를 터치 해도 동작 될 것이고
view에 구현 한것이라면 잘 되겟지요
댓글주소 추천 0 반대 0
     
     
NullPointException 2018-07-27 (금) 13:04
[@OSKiller]

실례가 안된다면 View에서 구현할 수 있는 방법을 알 수 있을까요 ?
아니면 참고할만 자료가 있으면 링크라도 첨부해주시면 감사하겠습니다 .. 
검색을 해봤는데 안되서요 ㅜㅜ
댓글주소 추천 0 반대 0
덧없음 2018-07-27 (금) 15:18
action down에서 mode=drag에 조건을 걸어서 이미지뷰 위치가 터치되었을때만으로 분기하면 될듯.
댓글주소 추천 0 반대 0
     
     
NullPointException 2018-07-27 (금) 17:17
[@덧없음]
그래볼려고했는데요. 손가락이 터치한 영역을 얻어오는 방법을 모르겠습니다 ..
댓글주소 추천 0 반대 0
          
          
덧없음 2018-07-27 (금) 18:05
[@NullPointException]

...네?! onTouch 파라미터에 담긴 정보가 터치정보인데요!?
댓글주소 추천 0 반대 0
OSKiller 2018-07-30 (월) 10:02
MotionEvent에서 x,y좌표 받을수 있고 
그 좌표가 이미지뷰의 좌표에 포함 되어 있으면 이동 시키면 될텐데요
댓글주소 추천 0 반대 0
     
     
NullPointException 2018-07-30 (월) 15:11
[@OSKiller]
해결이 안되네요 ㅜㅜ흑흑
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기