• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps Drawing a circle custom view centered with pinch zoom gesture

  • Thread starter Thread starter pedregal76
  • Start date Start date
P

pedregal76

Guest
I'm trying to make a custom view that draw a circle in the center os this view (position always fixed) and I want to implement the scale of this circule use pinch gesture (I've used ScaleGestureDetector).

I managed to draw the circle in the center of the custom layout but I can not implement the functionality of scaling correctly using pinch gesture.

Please, can you give a hint please how I could do it?

Thanks in advance!!

[HIGH]
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;

public class CoasterView extends View {
private static float MIN_ZOOM = 0;
private static float MAX_ZOOM = 5f;

private static float RADIO = 100f;


private float scaleFactor = 1.f;
private ScaleGestureDetector detector;


Paint paint;

public CoasterView(Context paramContext) {
super(paramContext);
detector = new ScaleGestureDetector(paramContext, new ScaleListener());

init();
}

public CoasterView(Context paramContext, AttributeSet paramAttributeSet) {
super(paramContext, paramAttributeSet);
detector = new ScaleGestureDetector(getContext(), new ScaleListener());

init();
}

public CoasterView(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
super(paramContext, paramAttributeSet, paramInt);
detector = new ScaleGestureDetector(getContext(), new ScaleListener());

init();
}

private void init() {
this.paint = new Paint();
this.paint.setColor(-16711936);
this.paint.setStrokeWidth(40.0F);
this.paint.setStyle(Paint.Style.FILL);
}

protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

canvas.save();
canvas.scale(scaleFactor, scaleFactor);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, RADIO, paint);
canvas.restore();

}




@Override
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);

invalidate();
return true;

}

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {

scaleFactor *= detector.getScaleFactor();
scaleFactor = Math.max(MIN_ZOOM, Math.min(scaleFactor, MAX_ZOOM));
invalidate();
return true;
}
}
}
[/HIGH]
 
Back
Top Bottom