Android drawLines - 线宽不同

时间:2013-07-11 21:53:43

标签: android canvas line draw

我遇到了canvas.drawLines()。

我的应用程序显示跟踪om地图视图,但结果行很糟糕。 有没有人看到这样的行为?即,线条没有相同的宽度,甚至不是“方形”,而且是菱形,有时甚至会消失!

我用for(){drawLine()}代替了,而drawPath代替了 - 同样的问题。

屏幕截图采用10英寸平板电脑1280x800,富士通。联想平板电脑显示相同。

http://jpegshare.net/c8/1d/c81daa6cff15e3d14cb1268679bb1af1.png.html

    borderPaint = new Paint();
    borderPaint.setAntiAlias(true);
    borderPaint.setStrokeWidth(5);        
    borderPaint.setStyle(Paint.Style.STROKE);
    borderPaint.setColor(Color.WHITE);
    //borderPaint.setAlpha(190);      


    fillPaint = new Paint();
    fillPaint.setAntiAlias(true);
    fillPaint.setStyle(Paint.Style.STROKE);
    fillPaint.setStrokeWidth(3);
    fillPaint.setColor(Color.RED);

....
    canvas.drawLines(linepoints, 0, linepoints_count, borderPaint);
    canvas.drawLines(linepoints, 0, linepoints_count, fillPaint);

其中,linepoints是要绘制的轨道线数组。每行设置4个浮点数。

2 个答案:

答案 0 :(得分:2)

好吧,我发现了我的问题。希望这可以帮助别人。

在画线之前,我做

canvas.translate(X, Y);

其中X和Y值是巨大的。像10E + 6..10E + 7或其他东西。

当我绘制线条时,它们的xy值也很大,但是负面,因此在屏幕坐标中,这个xy + XY在屏幕内部给出了一些东西 - 但是这个事实很重要并产生我自己的第一篇文章中描述的问题。 为什么会这样?我发现了一个线索。当drawLine算法尝试绘制一条线时,它会与线坐标(除法,乘法)混淆,并且由于机器算法的精度有限,算法会得到错误的数字。

How this was solved?

我将canvas.translate()括起来,并在绘图之前即时计算屏幕坐标。

现在,就像那样

screen_line_coords_x = line_coord_x - X; //X is offset applied in translate.           
screen_line_coords_y = line_coord_y - Y; //Y is offset applied in translate.

canvas.drawLine(screen_line_coords_x, screen_line_coords_y, ...); 
... or drawLines() or drawPath() - all give good results.

希望这可能有所帮助。

答案 1 :(得分:0)

我面对同样的事情。 但是,为什么你使用如此巨大的偏移量,因为屏幕分辨率约为1280x800? 我相信系统坐标离实际显示坐标太远,导致平移/旋转/缩放操作时计算错误。

尝试修改计算,以便在显示坐标内工作。