繁体   English   中英

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

[英]Efficient way to change color of Map Marker

我正在使用加载了许多小标记的GoogleMap 我们正在谈论400-500个标记。 在用户交互时,我希望这些标记的子集可以更改颜色,也许是100-300。 我希望在30毫秒或以下的时间内达到理想的效果,但最长50-60毫秒是可以接受的。

现在我有类似的代码:

onUserInteraction... {
    changeColors(getTheSubset)
}

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

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

在地图上最繁忙的部分,我看到这需要500毫秒或更长的时间,并且会有明显的滞后,不同的标记会在不同的时间改变颜色。 因此,我想知道是否存在一种更好的基于数学的方法,可以在地图上绘制小圆圈并更改其颜色,而无需删除/添加标记,同时又使alloc / gc最小。

您是否考虑过使用LevelListDrawable 而不是在更新时删除并重新添加所有标记,您可以将各种颜色的每种可绘制对象作为LevelListDrawable的级别。 然后,您可以调用setLevel()以在更新引脚组时以所需的颜色设置适当的可绘制对象。 我不确定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

因此,由于Gmap使用BitmapDescriptorFactory ,因此LevelListDrawable不是一个选项。

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

有两个问题。

  • 一,google-maps-android-v2不支持Marker的z-indexing。
  • 第二,如果您有很多Marker来更改其颜色,则其性能会导致伪像。

现在,谷歌最近发布了取得的更新Marker具有共同小号Bitmap快了很多画,但你总是可以投入更多的Markers它,打破它。

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

结论:不要在Marker上更改Bitmap (目前)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM