안녕하세요.

 

이미지 뷰를 터치로 축소 확대하는 기능입니다.

 

구현하고 싶은건 가로 680 pixel 사이즈를 단말기별 크기로 화면을 채우고 단말기 크기보다 사진이 작아지지 않게 터치축소시의 제한을

걸어 초기세팅의 비율보다 작아지지 않게 하고싶습니다.

아래의 소스중 matrix.postScale(scale, scale, scaleX, scaleY);

이 부분을 처리가 쉽지 않습니다.

 

아무리 해봐도 해결책이 안나옵니다. ㅜㅜ

 

조언 부탁 드리겠습니다.

 

감사합니다.

 

 

 

 

초기세팅 **********************************

 

    float mScaleMinSize; // 단말기별 원본비율

    float mAgeScaleX;

    float mAgeScaleY;

 

     Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
     float mlMobileWidth  = display.getWidth();
     
     mScaleMinSize = mlMobileWidth / 680; // 이미지 사이즈가로가 680 이라 화면크기에 맞게 세팅
     matrix.postScale(mScaleMinSize,mScaleMinSize);
     mImgOpen.setImageMatrix(matrix);

 

 

터치 이벤트 *******************************

 

 View.OnTouchListener MyTouchListener = new View.OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {

   switch (event.getAction() & MotionEvent.ACTION_MASK) {
   case MotionEvent.ACTION_DOWN:
    savedMatrix.set(matrix);
    start.set(event.getX(), event.getY());
    mode = DRAG;
    break;

   case MotionEvent.ACTION_POINTER_DOWN:
    oldDist = spacing(event);
    if (oldDist > 10f) {
     savedMatrix.set(matrix);
     midPoint(mid, event);
     mode = ZOOM;
    }
    break;
   case MotionEvent.ACTION_UP:
   case MotionEvent.ACTION_POINTER_UP:
    mode = NONE;
    break;
    case MotionEvent.ACTION_MOVE:
    if (mode == DRAG) {
     matrix.set(savedMatrix);
     matrix.postTranslate(event.getX() - start.x, event.getY()- start.y);
    } else if (mode == ZOOM) {
     float newDist = spacing(event);
     if (newDist > 10f) {
      matrix.set(savedMatrix);
      float scale = newDist / oldDist;
      float scaleX = 0;
      float scaleY = 0;
      
      if(scale < mScaleMinSize)
      {
       scale = mScaleMinSize;
       scaleX = mAgeScaleX;
       scaleY = mAgeScaleY;
      }
      else
      {
       scaleX = mid.x;
       scaleY = mid.y;
       mAgeScaleX = mid.x;
       mAgeScaleY = mid.y;
      }
       
      
      matrix.postScale(scale, scale, scaleX, scaleY);

 

      ((TextView)findViewById(R.id.read_txtYu5tTest)).setText(mScaleMinSize+" : "+scale+" : "+mid.x+" : "+mid.y+" : ");

     }
    }
    break;
   }

   mImgOpen.setImageMatrix(matrix);

   return true;
  }
 };