2013-02-13 115 views
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; 
    } 
} 

}

enter image description here

回答

0

我认为你只是在一个正确的方式做这个,你我的设备上的代码的伟大工程。 enter image description here

+0

无法放大矢量无限,画布有限制,必须修剪弧的不可见部分,在许多通过绘制多边形多边形实现此目的的程序中(并通过视图框修剪多边形边缘)的弧线。 – 2017-03-11 15:46:12