If you are enlarging and reducing the raster image in the canvas, use the code below, which
Add your code to your activity
MyView myView = new MyView(this); setContentView(myView);
and below your view.
public class MyView extends View { private Drawable image; private ScaleGestureDetector scaleDetector; private float scaleFactor = 1.f; public MyView(Context context) { super(context); init(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } private void init(Context ctx) { image = getResources().getDrawable(R.drawable.ic_launcher); image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); scaleDetector = new ScaleGestureDetector(ctx, new ScaleListener()); } @Override protected void onDraw(Canvas canvas) { canvas.save(); canvas.scale(scaleFactor, scaleFactor); image.draw(canvas); canvas.restore(); }; @Override public boolean onTouchEvent(MotionEvent ev) { scaleDetector.onTouchEvent(ev); return true; } private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { scaleFactor *= detector.getScaleFactor(); scaleFactor = Math.max(0.1f, Math.min(scaleFactor, 10.0f)); invalidate(); return true; } } }
source share