[英]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
。
有两个问题。
Marker
的z-indexing。 Marker
来更改其颜色,则其性能会导致伪像。 现在,谷歌最近发布了取得的更新Marker
具有共同小号Bitmap
快了很多画,但你总是可以投入更多的Markers
它,打破它。
我还尝试在顶部绘制一个Marker
,但其可见性设置为false
,然后在该位置被“选中”时将其设置为true
。 尽管公平地说,我没有对其进行基准测试,但这似乎并不太快。
结论:不要在Marker
上更改Bitmap
。 (目前)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.