2013-03-08 262 views
1

我按照這個教程http://www.allappsdevelopers.com/TopicDetail.aspx?TopicID=c16ed3b4-b422-43ba-b595-ee8e21dd1854問題是當我捕捉圖像是默認顯示大小如此之大但全部放大縮小如何設置默認大小爲正常圖像大小?如何設置縮小放大和縮小放大縮小尺寸?

public boolean onTouch(View v, MotionEvent event) { 

     ImageView view = (ImageView) v; 

     view.setScaleType(ImageView.ScaleType.MATRIX); 

     float scale; 



     // Dump touch event to log 

     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"); 

      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: //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) { //movement of first finger 

      matrix.set(savedMatrix); 

      if (view.getLeft() >= -392){ 

       matrix.postTranslate(event.getX() - start.x, event.getY() - 
    start.y); 

      } 

      } 

      else if (mode == ZOOM) { //pinch zooming 

      float newDist = spacing(event); 

      Log.d(TAG, "newDist=" + newDist); 

      if (newDist > 5f) { 

       matrix.set(savedMatrix); 

       scale = newDist/oldDist; /*thinking i need to play around 
    with this value to limit it*/ 

       matrix.postScale(scale, scale, mid.x, mid.y); 

      } 

      } 

      break; 

     } 



     // Perform the transformation 

     view.setImageMatrix(matrix); 



     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 FloatMath.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); 

    } 



    /** Show an event in the LogCat view, for debugging */ 

    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(TAG, sb.toString()); 

    } 

回答

1
float initialZoomLevel = 0.5f; 
matrix.setScale(initialZoomLevel, initialZoomLevel); 
view.setImageMatrix(matrix); 

把這個構造函數/動初始化方法爲您的圖像視圖。這將導致圖像立即以1/2尺寸顯示。任何進一步的修改的圖像應該在同一矩陣

public boolean onTouch(View v, MotionEvent event) { 
    matrix = view.getImageMatrix() 
    //.. now do zooming, etc on this matrix 
} 

這樣的方式來完成,圖像的「默認」大小設置爲原來的一半。希望這可以幫助!