我正在将现有的交通工具从MapView
升级到GoogleMap v2。我有两个核心要求,但从Overlays转到Markers会引入以下问题:
要求1) - 地图需要播种固定位置标记的初始图层。然后是另外一层标记来描绘车辆的位置。如果车辆具有相同的LatLng
,则应始终在车站位置的顶部进行渲染。
在MapView
中使用叠加层,可以通过操纵生成叠加层的方法的顺序来控制Z索引,这非常有效:
this.GenerateStations(); //Renders a base of Station Overlays
this.GenerateVehicles(); //Renders vehicles on-top of Station Overlays
但是,在使用GoogleMap v2时,无论每个标记实例的创建和添加顺序如何,Map都会随机呈现所有标记。 这是地图中可接受的缺陷还是有解决方法?
要求2) - 每个标记实现InfoWindowAdapter
以显示有关标记的信息。在后台线程中,车辆标记的位置和图标每秒更新一次,如果LatLng
与站点标记LatLng
相同,则图标需要更改。问题是,如果我更新标记的位置或片段,InfoWindowAdapter
会移动位置和图标,但是当我更新setIcon
属性时,我会丢失InfoWindowAdapter
:
//This works perfectly, InfoWindowAdapter snippet updates too
vMarker.setPosition(vehicleLatLng);
vMarker.setSnippet(vehicleSnippet);
//Causes the InfoWindowAdapter to disappear
vMarker.setIcon(BitmapDescriptorFactory.fromResource(imageResource));
当调用setIcon时,标记将被销毁并重建。 还有另一种方法可以更新标记的图标,而不必使用InfoWindowAdapter
丢失状态吗?
答案 0 :(得分:3)
看来Map正在随机渲染所有标记
没有。标记从屏幕顶部渲染到底部,因此按当前y值排序。
设置好图标后,您是否尝试过调用showInfoWindow
?
vMarker.setIcon(BitmapDescriptorFactory.fromResource(imageResource));
vMarker.showInfoWindow();
修改或
new Handler().post(new Runnable() {
public void run() {
vMarker.showInfoWindow();
}
});
根据Marcin的回答,你的评论是非常合理的。一种专门的聚类。
关于setIcon
之后消失的信息窗口:我已经报告了他们在发布具有此功能的版本之后。您可以在此处对此进行评论:http://code.google.com/p/gmaps-api-issues/issues/detail?id=5419
答案 1 :(得分:1)
但是,在使用GoogleMap v2时,会显示地图 无论每个标记的顺序如何,都随机渲染所有标记 实例已创建并添加。这是一个公认的缺点 地图或有解决方法吗?
无法控制标记及其渲染顺序。
答案 2 :(得分:0)
我遇到了同样的问题。
我有一个自定义标记,表示pois的当前位置和其他标记。
如果按给定顺序添加标记,首先是当前位置,然后是pois,地图上标记的顺序是正确的。 poi标记位于当前位置标记之上。
我的代码看起来像这样:
map.clear();
map.addMarker(currentPosition)
for (MarkerOptions poi : poiMarkerOptions) {
map.addMarker(poi);
}