微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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度.如果关节不可见,仍然有待观察……

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐