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

이미지 확대이동 질문드립니다.

0 추천

레이아웃에서 이미지를 화면에 꽉차게 만들었는데요.

자바코드에서 이미지를 확대 축소 이동이 가능하게 해봤는데 확대를 하고나니까 예를들어 확대를해서 이미지의 하단을 확대했다면 확대된 부분을 제외한 모든 부분이 잘려 없어져버리네요. 더 정확히 말씀드리자면 축소하게되면 정상적으로 돌아오기는하는데 확대후에 다른곳을 볼 수 없다는게 좀 그래서요 .. 소스코드를 첨부하는데 이건 구글링을 통해 모아서 제가 조금 수정해본 소스입니다.. 어느쪽에 문제가 있는지 충고 부탁드리겠습니다...

 

switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:   // first finger down only
                savedMatrix.set(matrix);
                start.set(event.getX(), event.getY());
                oldXvalue = event.getX();
                oldYvalue = event.getY();

                //  Log.i("Tag1", "Action Down X" + event.getX() + "," + event.getY());
                Log.i("Tag1", "Action Down rX " + event.getRawX() + "," + event.getRawY());
                mode = DRAG;
                break;

            case MotionEvent.ACTION_UP: // first finger lifted

                if (v.getX() > width && v.getY() > height) {
                    v.setX(width);
                    v.setY(height);
                } else if (v.getX() < 0 && v.getY() > height) {
                    v.setX(0);
                    v.setY(height);
                } else if (v.getX() > width && v.getY() < 0) {
                    v.setX(width);
                    v.setY(0);
                } else if (v.getX() < 0 && v.getY() < 0) {
                    v.setX(0);
                    v.setY(0);
                } else if (v.getX() < 0 || v.getX() > width) {
                    if (v.getX() < 0) {
                        v.setX(0);
                        v.setY(event.getRawY() - oldYvalue - v.getHeight());
                    } else {
                        v.setX(width);
                        v.setY(event.getRawY() - oldYvalue - v.getHeight());
                    }
                } else if (v.getY() < 0 || v.getY() > height) {
                    if (v.getY() < 0) {
                        v.setX(event.getRawX() - oldXvalue);
                        v.setY(0);
                    } else {
                        v.setX(event.getRawX() - oldXvalue);
                        v.setY(height);
                    }
                }
            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

                    v.setX(event.getRawX() - oldXvalue);
                    v.setY(event.getRawY() - oldYvalue);
                } 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);
                    }
                    view.setImageMatrix(matrix);
                }
                break;

        }

        return true;

 

 

파워코딩 (960 포인트) 님이 2018년 7월 31일 질문
그래픽 쪽 공부 목적이 아니시면, 그냥 Glide 같은 라이브러리를 사용하시는게 깔끔할 것 같습니다.

1개의 답변

0 추천
총체적 난국입니다

수정을 떠나서 처음부터 전면작성하세요
익명사용자 님이 2021년 2월 8일 답변
...