I am having a Relative layout where I am adding multiple ImageViews dynamically(user selects image from gallery) and I want to scale move and zoom a particular ImageView on which the user is performing scale move and zoom. Other ImageViews should be as it in layout. I have created ZoomableImageView class, but when i touch the ImageView the event is not detected.
ZoomableImageView.java
public class ZoomableImageView extends ImageView {
private static final String TAG = "zoomableimageview";
private float mScaleFactor = 1.f;
private ScaleGestureDetector mScaleDetector;
public ZoomableImageView(Context context) {
this(context, null);
}
public ZoomableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
Toast.makeText(context, "View Created", 1000).show();
mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
Toast.makeText(getContext(), "ondraw", 1000).show();
canvas.save();
canvas.scale(mScaleFactor, mScaleFactor);
canvas.restore();
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
Toast.makeText(getContext(), "Detector", 1000).show();
mScaleFactor *= detector.getScaleFactor();
// Don't let the object get too small or too large.
mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));
ZoomableImageView.this.invalidate();
return true;
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
mScaleDetector.onTouchEvent(event);
return true;
}
}