Canvas.drawLines:导致自发渐变线绘制的奇怪故障

时间:2015-08-01 16:07:52

标签: android canvas lines antialiasing

我有一个canvas.drawLines()和一个Paint的抗锯齿设置。如果我将其关闭,效果就会消失

发生了什么:出于某种原因,如果屏幕上显示toDraw的最后一个点,则会绘制线条,如左侧屏幕截图所示。如果它被拖到屏幕外面,那么线条就会如右图所示那样画出来 - 这应该是怎么回事 在调试器中检查toDraw - 最后一个点有有效坐标

Antialias glitch

绘制属性设置:

paint.setColor(0xFF000000);
paint.setStrokeWidth(1.2f);
paint.setAntiAlias(true);

绘图代码:

canvas.translate(dx, dy); //dx and dy are the only things different for the screenshots
float[] toDraw = ...;
canvas.drawLines (toDraw, paint);

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

好吧,看起来抗锯齿设置受小对象的影响很大:数组中的最后两个点非常接近 - dx,dy~1E-4

可能的解决方案(在Android 4.0.4上查看):
- 删除其中一个关闭点
- 致电myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null),其中myView是包含您的画布的视图 - 禁用抗锯齿