3

我对Android 地图draw()中类的方法有疑问。Overlay

当我移动地图时,方法draw()会被调用几次(从 4 到 13)。这对我来说是个问题,因为这种方法必须用 70000+ 点重新绘制我的路线,而且这是很多资源。

我找不到这个问题的描述,但是当我使用任何来源的代码示例时,我遇到了同样的问题。

4

2 回答 2

6

这是正常行为。当您移动地图时,您希望它能够平稳移动并实现任何地图移动都以较小的移动步长滑动。

为了一致性起见,draw()每个小步移动都会调用叠加层上的方法,因此您可以重新定位叠加层项目以遵循每个操作系统此步骤。

您可以使用以下方法对其进行改进:

改进1

对于每个小步骤,onDraw调用两次。一个shadow参数等于true,一个等于false。如果您不绘制阴影,您可以忽略其中一个调用,从而将开销减少 2,使用以下内容作为第一行onDraw()

if(shadow) return;

改进 2

优化您绘制路线的方式。如果您正在使用canvas.drawLine(),您可以使用canvas.drawPath(). 您只需用您的路线创建一次路径(针对特定的缩放级别),当地图移动时,您只需偏移路径,无需重新创建它。

改进3

您甚至可以进一步优化路径,仅添加与前一个像素的距离大于特定值(即 2 个像素)的点,从而减少路径中的点总数,而不会造成任何明显的质量损失。

我正在使用上面的方法和几千点(大约 20.000)的路线,并且路线在中程设备中平稳移动。

如果您需要上述任何一点的更多详细信息,请告诉我。

祝你好运。

于 2012-10-17T14:23:26.333 回答
0

我怀疑你用

boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)

并不是

void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)

第一个用于绘制动画,因此被多次调用。

参考:在我的 android 地图叠加层中不断调用 draw

于 2012-10-17T13:13:50.523 回答