2013-02-13 576 views
0

我使用的是加载了大量小标记的GoogleMap。我们可能会说400-500个标记。在用户交互时,我希望这些标记的子集可以改变颜色,可能是100-300个颜色。我希望在30ms或更短时间内达到理想的状态,但最多50-60ms是可以接受的。改变地图标记颜色的有效方法

现在我有代码是这样的:

onUserInteraction... { 
    changeColors(getTheSubset) 
} 

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

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

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

回答

0

所以LevelListDrawable s为不是一种选择,由于GMAP的使用BitmapDescriptorFactory

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

有两个问题。

  • 其中,google-maps-android-v2不支持Marker s的z-indexing。
  • 二,如果你有很多Marker s改变颜色,它的性能会导致人为因素。

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

我也试图画一个Marker顶部,但其可见性设置为false,然后将其设置为true当该位置得到“选择”。尽管公平我没有对它进行基准测试,但这似乎没有太快。

结论:不要在Marker s上更改Bitmap s。 (现在)

0

您是否考虑过使用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

+0

我试过了,但是你不能在MarkerOptions上设置图标级别。一旦你设置了'.icon',你不能再次调用它。 – yarian 2013-02-14 20:04:58

相关问题