2013-07-11 29 views
1

我被困与canvas.drawLines()。的Android drawLines - 线宽不同

我的应用程序显示跟踪OM地图视图,但所得到的线是可怕的。 有没有人看到这样的行为?即线条不具有相同的宽度,甚至不是“方形”,而是菱形,有时甚至消失!

我已经测试(){的drawLine()},而是和drawPath代替 - 同样的问题。

截图承担了10" 片剂1280×800,富士通。联想片剂显示了相同的。

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

嗯,我想出了我自己的问题。 – user2574421

回答

2

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

画线之前,我做

canvas.translate(X, Y); 

其中X和Y值很大。像10E + 6..10E + 7什么的。

当我画线,其XY值是巨大的太多,反而不利,因此在屏幕坐标该XY + XY给出一个屏幕里面的东西 - 但在我自己的第一篇文章中描述了这一事实问题和产生问题。 这是为什么发生?我发现了一条线索。当drawLine算法试图绘制一条线时,它会因线坐标(除法,乘法)而混乱,并且由于机器运算的精度有限,算法会得到错误的数字。

How this was solved? 

我dicarded canvas.translate(),和calulate屏幕COORDS上的苍蝇,只是画前。

现在,像

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. 

希望这可以帮助。

0

I'm面临着同样的事情。 但是,您为什么使用如此巨大的偏移量,因为屏幕大约是1280x800分辨率? 我认为系统坐标与实际显示坐标距离太远,导致在平移/旋转/缩放操作时出现错误的计算。

尝试以显示坐标的内部工作修改你的计算。

+0

您的回答不明确。如果你面对同样的事情,那么解决方案是什么?以及你指的是什么“翻译/旋转/缩放操作”? – yakobom