Android Google Maps v2 - 更新标记(Z-Index和WindowsAdapter状态的问题)

时间:2014-01-03 13:49:06

标签: android google-maps

我正在将现有的交通工具从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丢失状态吗?

3 个答案:

答案 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);
}