我正在尝试在我的MapView上绘制路线。 我扩展了Overlay并实现了draw()方法。 该路线被正确显示,但是在调试时, 我在draw()上设置了断点,并注意到它会不断地被调用。
我只想在有人移动地图或缩放时重新绘制它(绘制考虑这些变化)。 这可能是什么原因导致的?
我正在尝试在我的MapView上绘制路线。 我扩展了Overlay并实现了draw()方法。 该路线被正确显示,但是在调试时, 我在draw()上设置了断点,并注意到它会不断地被调用。
我只想在有人移动地图或缩放时重新绘制它(绘制考虑这些变化)。 这可能是什么原因导致的?
有两种可以覆盖的绘制方法。
void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
描述:绘制地图覆盖层。
boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)
描述:用于动画覆盖层的绘制调用。
我最初重写了第二个方法。
在改为使用第一个方法后,它成功了。
当我没有意识到绘制方法不仅适用于任何你绘制的标记,还适用于这些标记的阴影时,我就被绊倒了。例如,如果你有两个标记,并且将阴影设置为true(默认设置),那么绘制方法将被调用4次(每个标记一次,每个标记的阴影一次)!
ProgressBar loadingIcon = (ProgressBar) findViewById(R.id.loadingIcon);
...
//Network data now finished loading...
loadingIcon.setVisibility(View.INVISIBLE);
转换为:
loadingIcon.setVisibility(View.GONE);
这将完全从地图中移除它,不再在其上进行动画处理,因此也不会无限调用draw()。
我知道这是一个老问题,但我刚遇到。这是一篇“值得一提”的帖子。
绘制循环最终证明是我的编码错误。根据文档,如果绘制例程返回true,则正在请求立即更新。如果返回false,则每个覆盖层只进行两次传递;一次为阴影为true,一次为阴影为false。我返回了true,结果导致不断更新。当我改为返回false时,每个覆盖层仅出现了两次传递。没有循环。
你可以简单地将以下代码添加到你的 ItemizedOverlay 类中:
@Override public void draw( Canvas c, MapView m, boolean shadow ) { super.draw( c, m, false );}
这将从您的地图叠加层中移除阴影。