绘制具有特定像素宽度的线条

时间:2011-04-15 23:02:29

标签: android canvas paint stroke

我想在画布上使用具有一定宽度(以像素为单位,或理想情况下为“dp”)的线条显示X / Y数据。我已经尝试了Paint的setStrokeWidth(..)方法,这确实改变了线宽,但它不是我需要的。在我的情况下,我使用matrix.preScale(xScale,yScale)将我的画布缩放为“真实工程单位”,因此X比例表示0到100,Y为0到1.Paint对象的setStrokeWidth()方法似乎设置笔划,使其遵循我的矩阵preScale()设置。换句话说,水平线绘制得非常薄,垂直线绘制得非常厚。

有没有办法配置Paint,这样无论绘制线的方向,其宽度都是一致的像素数?

我尝试定义一个Drawable,它是一行,并从中创建一个ShapeDrawable,然后将它应用到Paint,但在运行时遇到了一些讨厌的类转换错误。这让我觉得这是错误的做法。但也许我太早放弃了。

我知道有一些Android绘图/图表包可用,有些包含源代码,但我真的希望在这里了解平台,而不是使用第三方解决方案。

感谢任何提示! 富

2 个答案:

答案 0 :(得分:11)

例如在Android上:paint.setStrokeWidth(3);此方法设置线宽。在这种情况下,线宽为3像素。我正在黑莓上搜索这种方法。

试试这个:

    Graphics.setColor(Color.RED);
    Graphics.setStrokeWidth(20);
    Graphics.drawRect(0, 0, 100, 100);

可在net.rim.device.api.ui.Graphics包中找到。

答案 1 :(得分:0)

在地图上绘制叠加层时,我必须做类似的事情。

由于用户可以使用多点触控动态缩放地图,当我进入绘图程序时,我会计算x和y轴的缩放系数,将其应用到画布,绘制地图,然后反转此缩放系数并将其应用于叠加的线宽。因此缩放画布并缩放叠加层,然后进行反缩放,因此它们实际上是固定宽度。

我发现这种方法效果非常好,没有真正的性能影响。