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

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

글쓴이 : NullPointException 날짜 : 2018-07-27 (금) 11:13 조회 : 390
글주소 : http://www.androidside.com/B49/170168
 
  고화질 이미지가 무료라고?
크라우드픽에서 무료 프로모션 받고, 가장 한국적인 스톡 사진을 이용해보세요!
www.crowdpic.net
  아동학습지도 한솔교육
놀이를 통한 신기한 교육 경험! 지구인재가 자라는 나라 아동문학
corp.eduhansol.com
  방통대 기말시험 노우플러스
방통대 교재 핵심요약, 과목별 예상문제, 기말자료, 기출문제 분석, 아동문학
www.knouplus.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 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기