1
我正在学习如何使用矢量绘图API,并且遇到以下问题。如何正确缩放矢量图形?
我在画布上绘制线条和弧线,包含此画布的视图可以放大缩小。放大时,线条可以完美缩放,但弧线不会。
公共类MyView的扩展视图{
public MyView(Context context, AttributeSet attrs)
{
super(context, attrs);
mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
mGestureDetector = new GestureDetector(context, new GestureListener());
rects = new RectF[1000];
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(mOffset.x * mScaleFactor + canvas.getWidth() * 0.5f, mOffset.y * mScaleFactor + canvas.getHeight() * 0.5f);
canvas.scale(mScaleFactor, mScaleFactor);
canvas.drawLine(-10, -5, 10, 5, paint);
canvas.drawLine(10, -10, -10, 10, paint);
paint.setStrokeWidth(1);
RectF f = new RectF(-50, -50, 50, 50);
canvas.drawArc(f, 0.f, 360.f, true, paint);
canvas.restore();
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(0.01f, Math.min(mScaleFactor, 100.0f));
invalidate();
return true;
}
}
}
无法放大矢量无限,画布有限制,必须修剪弧的不可见部分,在许多通过绘制多边形多边形实现此目的的程序中(并通过视图框修剪多边形边缘)的弧线。 – 2017-03-11 15:46:12