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

}
4

1 回答 1

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
}

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

于 2013-09-11T15:51:39.277 回答