Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Google Maps v2-更新标记(Z索引和WindowsAdapter状态问题)_Android_Google Maps - Fatal编程技术网

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

Android Google Maps v2-更新标记(Z索引和WindowsAdapter状态问题),android,google-maps,Android,Google Maps,我正在将现有的交通应用程序从MapView升级到Google地图v2。我有两个核心要求,但从覆盖层到标记层带来了以下问题: 要求1)地图需要在固定位置标记的初始层中播种。然后再加一层标记来描绘车辆的位置。如果车辆具有相同的LatLng,则应始终在站点位置的顶部渲染 使用MapView中的覆盖图,可以通过操纵生成覆盖图的方法的顺序来控制Z索引,这非常有效: this.GenerateStations(); //Renders a base of Station Overlays this.Gen

我正在将现有的交通应用程序从
MapView
升级到Google地图v2。我有两个核心要求,但从覆盖层到标记层带来了以下问题:

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

使用
MapView
中的覆盖图,可以通过操纵生成覆盖图的方法的顺序来控制Z索引,这非常有效:

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

然而,当使用谷歌地图v2时,地图似乎是 随机呈现所有标记,而不考虑每个标记的顺序 创建并添加实例。这是公认的缺陷吗 地图还是有解决办法

无法控制标记或标记的渲染顺序

然而,当使用谷歌地图v2时,地图似乎是 随机呈现所有标记,而不考虑每个标记的顺序 创建并添加实例。这是公认的缺陷吗 地图还是有解决办法

无法控制标记或标记的渲染顺序

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

否。标记从屏幕顶部渲染到底部,按当前y值排序

设置图标后是否尝试调用
showInfoWindow

vMarker.setIcon(BitmapDescriptorFactory.fromResource(imageResource));
vMarker.showInfoWindow();
编辑:

new Handler().post(new Runnable() {
    public void run() {
        vMarker.showInfoWindow();
    }
});
你从马辛的回答中得出的意见是非常合理的。一种专门的集群

关于
setIcon
之后消失的信息窗口:我报告说,就在他们发布了一个具有此功能的版本之后。您可以在此处对此发表评论:

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

否。标记从屏幕顶部渲染到底部,按当前y值排序

设置图标后是否尝试调用
showInfoWindow

vMarker.setIcon(BitmapDescriptorFactory.fromResource(imageResource));
vMarker.showInfoWindow();
编辑:

new Handler().post(new Runnable() {
    public void run() {
        vMarker.showInfoWindow();
    }
});
你从马辛的回答中得出的意见是非常合理的。一种专门的集群


关于
setIcon
之后消失的信息窗口:我报告说,就在他们发布了一个具有此功能的版本之后。你可能想在这里对此发表评论:

我也有同样的问题

我有一个自定义标记,指示当前位置和其他POI标记

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

我的代码如下所示:

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

我也有同样的问题

我有一个自定义标记,指示当前位置和其他POI标记

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

我的代码如下所示:

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

谢谢,我想我可以做以下工作作为解决办法:创建一组新的车辆图标,其中有一个图形,当车距相等时指示它在车站,然后隐藏车站图标,直到车辆移动。但是,这意味着我仍然必须在车辆上设置图标,这导致了我提到的第二个问题。我还在研究。。。谢谢你提供的信息。谢谢,我想我可以做以下工作作为解决办法:创建一组新的车辆图标,其中有一个图形,当车位相等时,显示它在车站,然后隐藏车站图标,直到车辆移动。但是,这意味着我仍然必须在车辆上设置图标,这导致了我提到的第二个问题。我还在研究。。。感谢您提供的信息。感谢您澄清标记生成的顺序。另外,
showInfoWindow()
也没有产生预期的结果,感谢谷歌的票证链接,我发布了我的问题。@CampbellGolf如果在发布的
Runnable
中这样做会怎么样?我知道这可能因为眨眼而无法接受,但也许总比什么都没有好。请参阅我上面的编辑。感谢您澄清标记生成的顺序。另外,
showInfoWindow()
也没有产生预期的结果,感谢谷歌的票证链接,我发布了我的问题。@CampbellGolf如果在发布的
Runnable
中这样做会怎么样?我知道这可能因为眨眼而无法接受,但也许总比什么都没有好。见我的编辑上面。