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 に答える