【问题标题】:Android Google Maps v2 - Updating Markers (Issues with Z-Index and WindowsAdapter State)Android Google Maps v2 - 更新标记(Z-Index 和 WindowsAdapter 状态问题)
【发布时间】:2014-01-03 13:49:05
【问题描述】:

我正在将现有的交通应用程序从 MapView 升级到 GoogleMap v2。我有 2 个核心要求,但从叠加层转移到标记会引入以下问题:

要求 1) - 地图需要播种初始层的固定位置标记。然后附加一层标记来描绘车辆的位置。如果车辆具有相同的LatLng,则它们应始终呈现在车站位置的顶部。

MapView 中使用叠加层,Z-Index 可以通过操纵生成叠加层的方法的顺序来控制,这非常有效:

this.GenerateStations();  //Renders a base of Station Overlays
this.GenerateVehicles();  //Renders vehicles on-top of Station Overlays

但是,在使用 GoogleMap v2 时,无论创建和添加每个标记实例的顺序如何,地图似乎都在随机渲染所有标记。 这是公认的地图缺陷还是有解决方法?

要求 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 的状态?

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    似乎地图正在随机渲染所有标记

    没有。标记从屏幕顶部渲染到底部,因此按当前 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

    【讨论】:

    • 感谢您阐明生成标记的顺序。另外,showInfoWindow() 没有产生预期的结果,感谢 Google 的票证链接,我发布了我的问题。
    • @CampbellGolf 如果您在已发布的Runnable 中这样做会怎样?我知道这可能因为眨眼而无法接受,但也许总比没有好。请参阅上面的编辑。
    【解决方案2】:

    但是,在使用 GoogleMap v2 时,地图似乎是 无论每个标记的顺序如何,随机渲染所有标记 创建并添加实例。这是公认的缺陷吗? 地图还是有解决方法?

    无法控制标记,也无法控制它们的呈现顺序。

    【讨论】:

    • 谢谢,我想我可以做以下解决方法:创建一组新的车辆图标,其中包含一个图形,当 LatLng 相等时它在车站,然后隐藏车站图标直到车辆移动。但是,这意味着我仍然需要在车辆上设置图标,这导致了我提到的第二个问题。我仍在研究...感谢您提供的信息。
    【解决方案3】:

    我遇到了同样的问题。

    我有一个自定义标记,用于指示当前位置和 pois 的其他标记。

    如果您按给定顺序添加标记,首先是当前位置,然后是 pois,则标记在地图上的顺序是正确的。 poi 标记位于当前位置标记的上方。

    我的代码如下所示:

    map.clear();
    map.addMarker(currentPosition)
    for (MarkerOptions poi : poiMarkerOptions) {
         map.addMarker(poi);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2013-01-12
      • 2013-08-31
      相关资源
      最近更新 更多