改变地图标记颜色的有效方法

时间:2013-02-13 19:56:29

标签: android maps google-maps-mobile

我正在使用加载了大量小标记的GoogleMap。我们正在谈论400-500个标记。在用户交互时,我想让这些标记的子集改变颜色,可能是100-300。我希望在30ms或更低的时间内达到理想状态,但最多可达50-60ms。

现在我的代码类似于:

onUserInteraction... {
    changeColors(getTheSubset)
}

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

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

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

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用LevelListDrawable?在更新时,您可以将各种颜色的各种颜色作为LevelListDrawable的级别,而不是删除和重新添加所有标记。然后,您可以调用setLevel()以更新引脚组时使用所需的颜色设置相应的drawable。我不是100%确定你可以使用LevelListDrawable作为地图引脚,但值得一试。

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

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

答案 1 :(得分:0)

因为Gmap使用了LevelListDrawable,所以BitmapDescriptorFactory不是一个选项。

我找到的一个解决方案是使用新颜色在旧版本的顶部绘制Marker,然后从下面删除旧版本。

有两个问题。

  • 一,google-maps-android-v2不支持Marker的z-indexing。
  • 二,如果你有很多Marker来改变它的颜色,它的表现会造成瑕疵。

现在,最近Google发布了一个更新版本,使Marker的共同Bitmap绘制速度提高了很多,但是您可以随时向它添加更多Markers并打破它。< / p>

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

结论:请勿在{{1​​}}上更改Bitmap。 (现在)