How to enable the function of increasing / decreasing the image (for two fingers) for the image in android

Possible duplicate:
android imageView: adjust scaling and scaling options

I am very new to android. I have an image representation in my layout. I want to enable zooming and zoom out of the image coming from this image. Scaling should be done with two fingers. Can anyone tell me how to do this,

Thanks,

Rajah

+7
source share
1 answer

see this

private static final String TAG = "Touch"; //These matrices will be used to move and zoom image Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); // We can be in one of these 3 states static final int NONE = 0; static final int DRAG = 1; static final int ZOOM = 2; static final int DRAW =3; int mode = NONE; // Remember some things for zooming PointF start = new PointF(); PointF mid = new PointF(); float oldDist = 1f; // Limit zoomable/pannable image private float[] matrixValues = new float[9]; private float maxZoom; private float minZoom; private float height; private float width; private RectF viewRect; /////////************ touch events functions **************//////////////////// @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if(hasFocus){ init(); } } private void init() { maxZoom = 4; minZoom = 0.25f; height = myimage.getDrawable().getIntrinsicHeight()+20; width = myimage.getDrawable().getIntrinsicWidth()+20; viewRect = new RectF(0, 0, myimage.getWidth()+20, myimage.getHeight()+20); } /////////************touch events for image Moving, panning and zooming ***********/// public boolean onTouch(View v, MotionEvent event) { // Dump touch event to log dumpEvent(event); // Handle touch events here... switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); start.set(event.getX(), event.getY()); Log.d(TAG, "mode=DRAG"); mode = DRAG; break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); Log.d(TAG, "oldDist=" + oldDist); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; Log.d(TAG, "mode=ZOOM"); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: mode = NONE; Log.d(TAG, "mode=NONE"); break; case MotionEvent.ACTION_MOVE: if (mode == DRAW){ onTouchEvent(event);} if (mode == DRAG) { ///code for draging.. } else if (mode == ZOOM) { float newDist = spacing(event); Log.d(TAG, "newDist=" + newDist); if (newDist > 10f) { matrix.set(savedMatrix); float scale = newDist / oldDist; matrix.getValues(matrixValues); float currentScale = matrixValues[Matrix.MSCALE_X]; // limit zoom if (scale * currentScale > maxZoom) { scale = maxZoom / currentScale; }else if(scale * currentScale < minZoom){ scale = minZoom / currentScale; } matrix.postScale(scale, scale, mid.x, mid.y); } } break; } myimage.setImageMatrix(matrix); return true; // indicate event was handled } //*******************Determine the space between the first two fingers 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); } //************* Calculate the mid point of the first two fingers 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); } } 
+12
source

All Articles