Overlay.draw() calls many times

笑着哭i 提交于 2019-12-04 14:56:16

This is the normal behaviour. When you move the map, you expect it to move smoothly and to achive that any map movement is slipt in smaller movement steps.

For the sake of consitency, the draw() method on the overlay is called for each of this small steps movement, so you can reposition your overlay items to follow each os this steps.

You can improve it using the following:

Improvement 1

For each of the small steps, onDraw is called twice. One with shadow parameter equal to trueand one equal to false. If you are not drawing shadows you can just ignore one of the calls, and therefore reduce the overhead by 2, using the following as the first line of onDraw():

if(shadow) return;

Improvement 2

Optimize the way you are drwaing the route. If you are using canvas.drawLine() you can definitly improve it by using canvas.drawPath(). You create a path with your route just once (for a specific zoom level) and when the map is moved you just offset the path, without the need to recreat it.

Improvement 3

You can even optimize further the path, only adding points that have a distance from previous pixel bigger a speciffic value (i.e. 2 pixels), reducing the total number of points in the path without any visible loss of quality.

I'm using the approach above with routes of several thousand points (aprox 20.000) and the route move smoothly in a medium range device.

Let me know if you need more details in any of the above points.

good luck.

shkschneider

I suspect you use

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

and not

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

The first one is used to draw animations, so it gets called many times.

Ref: draw is being constantly called in my android map overlay

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!