我遇到了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个浮点数。
答案 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? 我相信系统坐标离实际显示坐标太远,导致平移/旋转/缩放操作时计算错误。
尝试修改计算,以便在显示坐标内工作。