我对Android地图中draw()
课程的Overlay
方法有疑问。
当我移动地图时,方法draw()
会被调用几次(从4到13)。这对我来说是一个问题,因为这种方法必须用70000+点重新绘制我的路线,这是很多资源。
我找不到这个问题的描述,但是当我使用任何来源的代码示例时,我也有同样的问题。
答案 0 :(得分:6)
这是正常行为。当您移动地图时,您希望它能够平滑移动并且能够在较小的移动步骤中滑动任何地图移动。
为了保持一致,每个小步骤移动都会调用叠加层上的draw()
方法,因此您可以重新定位叠加层项目,以跟随每个步骤。
您可以使用以下方法改进它:
改进1
对于每个小步骤,onDraw
被调用两次。一个shadow
参数等于true
,一个等于false
。如果你没有绘制阴影,你可以忽略其中一个调用,因此将开销减少2,使用以下作为onDraw()
的第一行:
if(shadow) return;
改进2
优化您的路线方式。如果您使用canvas.drawLine()
,则可以使用canvas.drawPath()
来明确改进它。您只需为路径创建一个路径(对于特定的缩放级别),并且当移动地图时,您只需偏移路径,而无需重新调整路径。
改进3
您甚至可以进一步优化路径,只添加距前一个像素的距离大于特定值(即2个像素)的点,从而减少路径中的点总数,而不会有任何明显的质量损失。
我正在使用上述方法,路线数千点(aprox 20.000),路线在中程设备中平稳移动。
如果您需要上述任何一点的详细信息,请与我们联系。
祝你好运。答案 1 :(得分:0)
我怀疑你使用
boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)
而不是
void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
第一个用于绘制动画,因此它被多次调用。
参考:draw is being constantly called in my android map overlay