我在自定义视图中在画布上绘制圆弧,如下所示。Paint
and rectangle
被定义在外部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);
}
When I run this code on Galaxy Nexus with 4.3, there are following artefacts.
There is no such artefacts when running on Nexus 5 with 4.4.4 though.
我仅通过(225f,315f)等角度和其他一些角度观察此类文物。大多数时候,弧线的形状是正确的。
有没有办法避免这些文物?
Update:我尝试使用软件、硬件和无层setLayerType()
。文物改变了形式,但仍然存在。
我是 StackOverflow 新手,想添加评论但无法(积分不足),所以不得不将我的评论放在答案中!
一件奇怪的事情是,圆弧超出了指定的结束位置,在外侧有一条垂直的直线。内部终点似乎没问题。当然,这一行和其他混乱的行并不能说明问题的原因。
它似乎出现在结束角度为exactly90 度的倍数。这看起来像是一个数值计算错误、浮点数舍入问题等。@kcoppock 评论说 314.98f 已经规避了该错误。大概any除了 315.0f 之外的值也可以达到目的。
如果涉及代码优化(尝试以尽可能少的线段绘制圆弧),另一个可能有效的技巧是通过将圆弧切割成多个片段来简化圆弧 -> 使用多个 drawArc 调用,每个调用都跨越某个最大角度。候选角度为 30、45、90 和 180 度。关节是否会隐形还有待观察......
这是一个有点遥远的事情,希望这些建议中的任何一个都能奏效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)