android – Canvas.drawArc()artefacts

前端之家收集整理的这篇文章主要介绍了android – Canvas.drawArc()artefacts前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在自定义视图中在画布上绘制弧,如下所示.绘制和矩形在onDraw()之外定义,并在其中添加以简化目的.
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    RectF rectangle = new RectF(60f,60f,480f,480f);

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(0x40000000);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(120);

    canvas.drawArc(rectangle,225f,315f,false,paint);
}

当我使用4.3在Galaxy Nexus上运行此代码时,有以下人工制品.

但是在使用4.4.4的Nexus 5上运行时没有这样的假象.

我通过像(225f,315f)和其他一些角度观察这些假象.大多数情况下,弧形具有正确的形状.

有没有办法避免这些文物?

更新:我尝试使用setLayerType()来使用软件,硬件和无图层.人工制品改变了形式,但仍然存在.

解决方法

我是StackOverflow的新手,想添加评论但不能(没有足够的分数)所以不得不把我的评论放在答案中!

奇怪的是,电弧超出了指定的终点位置,外侧有一条直的垂直线.内端点似乎没问题.当然,这和其他乱七八糟的线条并没有说明导致问题的原因.

当结束角度恰好是90度的倍数时,似乎会出现.这看起来像一个数字计算错误,浮动圆整问题等.@ kcoppock评论说314.98f已经绕过了这个bug.可能除了315.0f以外的任何其他值都可以做到.

如果涉及代码优化(尝试以尽可能小的线段绘制弧),另一个可能有效的技巧是通过将弧切成碎片来简化弧 – >使用多个drawArc调用,每个调用跨越一定的最大角度.考生分别为30度,45度,90度和180度.如果关节不可见,仍然有待观察……

这是一个很长的镜头,希望这些建议中的任何一个都可行.

猜你在找的Android相关文章