我在自定义视图中在画布上绘制弧,如下所示.绘制和矩形在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度.如果关节不可见,仍然有待观察……
这是一个很长的镜头,希望这些建议中的任何一个都可行.