3

我试图在android中画一条非常细的线(小于一个像素厚)。我在用着

Paint blackThin = new Paint();
blackThin.setStrokeWidth(0.1f);
blackThin.setColor(Color.BLACK);

初始化绘画对象。

这在 Android 2.2 中运行良好,但是当我在 4.2 中尝试时(我认为也是 4.1,我简单地测试了一个 - 我没有测试除 2.2、4.1.2 和 4.2 之外的任何其他版本)行不会当我画它们时出现。为了让它们出现在 4.2 中,似乎我必须将抗锯齿标志设置为 true。(我试过了,线条出现了。)但我真的不想要那样,因为这会模糊线条等。

这是Android中的错误吗?除了打开抗锯齿之外,我还能做些什么来让它工作吗?

编辑:我还用 0.9 的像素大小对此进行了测试,问题是一样的。

谢谢您的帮助!

4

2 回答 2

3

width在没有抗锯齿的情况下,您无法绘制小于一个像素的线条。

抗锯齿的重点是计算一个像素的颜色,如果一个元素没有完全填满像素(就像一条只有十分之一像素宽度的线)。

你可以通过画一条更轻的线来模拟它,但这仍然不会接近真正的抗锯齿线。

看一下这张图片,例如:

在此处输入图像描述

真的不可能通过改变线条的颜色来复制抗锯齿的结果。

我意识到示例中的线条宽度 > 1 像素,但同样的原理也适用。像素的“暗度”是根据有多少像素被线条填充来计算的。因此,灰色实线将不起作用。

于 2013-01-02T08:31:38.810 回答
3

如果您想要一条非常细的线,请使用setStrokeWidth(0),如文档所述Pass 0 to stroke in hairline mode.

子像素绘图显然需要消除锯齿或其他变通方法。很有可能,例如使用软件渲染,低于一个像素的线条总是被绘制为细线,但是使用硬件渲染(在 Android 4.2 中可能会自动使用,但在 2.2 中不会),行为会发生变化,并且许多方便的功能会消失。(这通常是造成差异和奇怪故障的原因,顺便说一句。)

于 2013-01-01T23:41:28.813 回答