Android canvas.drawArc()使用笔划绘制非常不精确

Android canvas.drawArc()使用笔划绘制非常不精确,android,Android,我正在尝试使用canvas.drawArc()方法和一个将笔划设置为样式的绘制创建一个厚(~40dp)分区圆 但这是onDraw()实现 protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); p.setColor(Color.BLUE); p.setStrokeWidth(getResources().get

我正在尝试使用canvas.drawArc()方法和一个将笔划设置为样式的绘制创建一个厚(~40dp)分区圆

但这是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);

}
给我这个结果


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

我也遇到过类似的问题。在Android Studio预览窗口中,我的自定义视图绘制得很好,但在我的HTC One M8上运行Android 5.0.2时,在0度处有一个轻微的间隙

我将视图设置为使用软件渲染,解决了以下问题:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
硬件渲染: 软件渲染:


我不认为你可以通过画两条弧来避免这种情况。你不使用drawCircle()有什么原因吗?我实际上想在不同的片段上使用不同的颜色,我只是想让代码段更短。我发现了同样的事情!外边缘需要多扫掠1.0f角,但这会使内边缘卷曲太远。我希望使用
Paint.setStrokeCap(Paint.Cap.BUTT)本来可以修复它-但运气不好:-(