canvas.drawArc()使用Stroke Paint非常不精确

时间:2013-05-27 13:14:40

标签: android

我正在尝试使用canvas.drawArc()方法创建一个厚(~40dp)的分区圆,并将一个Paint with STROKE设置为样式。

但是这个onDraw()实现

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

    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
    p.setColor(Color.BLUE);
    p.setStrokeWidth(getResources().getDimension(R.dimen.circle_stroke_width));
    p.setStyle(Paint.Style.STROKE);

    RectF rect = new RectF(
            getWidth()*0.1f,
            getWidth()*0.1f+200,
            getWidth()*0.9f,
            getWidth()*0.9f+200
    );

    canvas.drawArc(rect, 0, 180, false, p);
    canvas.drawArc(rect, 180, 180, false, p);

}

给了我这个结果

Link to the result picture because I don't have any reputation yet

使用此方法连接多个弧时,有没有办法防止这些间隙?

1 个答案:

答案 0 :(得分:2)

我有类似的问题。在Android Studio预览窗口中,我的自定义视图很好,但在我的HTC One M8和Android 5.0.2上运行时,在0度处有一个小的差距。

我将视图设置为使用软件渲染并修复了问题:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

硬件渲染: 软件渲染:

gap no gap