如何设置缩小放大和缩小放大缩小尺寸?

如何设置缩小放大和缩小放大缩小尺寸?

问题描述:

我按照这个教程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()); 

    } 

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 
} 

这样的方式来完成,图像的“默认”大小设置为原来的一半。希望这可以帮助!