12

我正在尝试在我的 MapView 上绘制路线。我扩展了 Overlay 并实现了 draw() 方法。路线显示正确,虽然在调试时,我在 draw() 上添加了一个断点,并注意到它被不断调用。

我只希望在有人移动地图或缩放时重新绘制它(绘制路线时绘制考虑了这些变化)可能导致这种情况?

4

8 回答 8

13

有两种绘制方法可以被覆盖。

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

描述:在地图上绘制叠加层。

boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)
描述: 动画覆盖的绘制调用。

我最初覆盖了第二个。
改成第一种方法后,就成功了。

于 2010-05-12T10:16:13.787 回答
2

我认为 draw 方法被反复调用,因为背景不断被重绘。尝试将“MapView.ReticleDrawMode”设置为 DRAW_RETICLE_UNDER。这基本上告诉 mapView 在叠加层下绘制标线。所以调用背景时不会调用overlay的draw方法。这为我解决了这个问题。

欲了解更多信息,请看这里:MapView Api

于 2010-05-09T05:35:54.690 回答
2

当我没有意识到 draw 方法 get 不仅调用了您绘制的任何标记,而且还调用了这些标记的阴影时,我被绊倒了。例如,如果您有两个标记并且阴影设置为 true(这是默认设置),那么您将调用 draw 方法 4 次(每个标记一次,标记的每个阴影一次)!

于 2010-10-09T17:01:48.853 回答
2

经过进一步审查,Overlay draw() 确实按照文档中的描述工作。shadow = true 绘制一次,shadow = false 绘制一次。

有趣的是,特定的叠加层 draw() 方法响应为在 MapView 中绘制的每个元素的广告。例如,在我的例子中,它似乎对每个谷歌地图、在地图上绘制的谷歌徽标以及我自己绘制的特定叠加层做出响应。显然每个两次(阴影真|假)。

这可能是渲染地图的预期方式。我没有找到或花费足够的时间来研究这些信息。

此外,在我自己的情况下,我在地图上呈现了一个透明面板,其中包含 CheckBox(s) 和 TextView 小部件。TextView 强制 draw() 方法不间断地运行,因为 textview 始终在侦听输入并因此触发覆盖的重绘。

于 2012-02-09T20:06:46.190 回答
1

对我来说,它看起来像一个奇怪的错误 - 有时 draw 方法被连续调用,有时不是。

这里

于 2011-12-11T16:53:38.810 回答
1

在我的应用程序中,当我为地图加载网络数据时,会显示一个不确定的进度条(例如旋转圆圈)。网络数据加载完成后,我将进度条的可见性设置为不可见。但是,这导致地图不断重绘,因为似乎在地图上发生的任何动画(我猜)都会导致地图本身重绘。对此的简单解决方案是将可见性设置为消失。例如改变这个:

ProgressBar loadingIcon = (ProgressBar) findViewById(R.id.loadingIcon);
...
//Network data now finished loading...
loadingIcon.setVisibility(View.INVISIBLE);

对此:

loadingIcon.setVisibility(View.GONE);

它将它完全从地图中删除,不再对其进行动画处理,因此不会导致 draw() 被无限期地调用。

于 2012-02-27T23:41:39.990 回答
0

我知道这是一个老问题,但我现在才遇到它。这是一篇“物有所值”的帖子。

绘制循环原来是我的一个编码错误。根据文档,如果绘图例程返回 true,则它要求立即更新。如果返回 false,则每个叠加层只进行两次传递;一个代表影子真,一个代表影子假。我返回 true 导致不断更新。在我更改为返回 false 后,每个叠加层只发生了两次传递。没有循环。

于 2012-07-12T18:02:13.420 回答
-1

您可以简单地将其添加到您的 ItemizedOverlay 类:

@Override public void draw( Canvas c, MapView m, boolean shadow ) { super.draw( c, m, false );}

这将从您的地图视图叠加层中移除阴影。

于 2011-09-22T06:37:20.563 回答