0

我正在使用GoogleMap加载了很多小标记的 a 。我们说的可能是 400-500 个标记。在用户交互时,我想让这些标记的一个子集改变颜色,可能是 100-300 个。我希望在 30 毫秒或更短的时间内达到理想状态,但最多 50-60 毫秒也是可以接受的。

现在我有类似的代码:

onUserInteraction... {
    changeColors(getTheSubset)
}

changeColors(subset) {
    getMarkersForSubset(subset).removeAllFromMap();
    map.addNewMarkers(subset)
}

所以我删除了某种颜色的旧标记(比如绿色),并为这些位置添加新标记(比如黑色)。当子集不再相关时,我会执行相反的过程。

在地图最繁忙的部分,我看到这需要 500 毫秒或更长时间,并且存在明显的滞后,不同的标记在不同的时间改变颜色。所以我很好奇是否有更好的基于数学的方法来在地图上绘制小圆圈并更改它们的颜色而不删除/添加标记,同时最小化 alloc/gc。

4

2 回答 2

0

所以LevelListDrawables 不是一个选项,因为 Gmap 使用BitmapDescriptorFactory.

Marker我发现的一种解决方案是用新颜色在旧的顶部绘制一个,然后从下面删除旧的。

有两个问题。

  • 一、google-maps-android-v2不支持Markers的z-indexing。
  • 二,如果你有很多Markers要改变颜色,它的表现会导致伪影。

现在,谷歌最近发布了一个更新,它使Marker带有 commonBitmap的 s 的绘制速度更快,但你总是可以投入更多Markers并打破它。

我还尝试Marker在顶部绘制一个,但将其可见性设置为false,然后将其设置true为该位置被“选中”时。尽管公平地说我没有对它进行基准测试,但这似乎并没有快太多。

结论:不要Bitmap在 s 上更改Markers。(目前)

于 2013-03-12T20:55:00.920 回答
0

您是否考虑过使用LevelListDrawables?而不是在更新时删除和重新添加所有标记,您可以将各种颜色的各种可绘制对象作为LevelListDrawable. 然后,您可以在更新引脚集时调用setLevel()以使用所需颜色设置适当的可绘制对象。我不是 100% 确定您可以使用 aLevelListDrawable作为地图图钉,但值得一试。

API:http: //developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html

示例:http: //iserveandroid.blogspot.com/2010/10/progress-bar-implementation-using-level.html

于 2013-02-13T21:01:01.643 回答