我的地图上显示了几个标记,它们要么彼此靠近,要么甚至相互重叠。我需要始终在顶部放置一个特定的标记。我是先将标记添加到地图上还是最后添加到地图上并不重要,它通常最终被放置在一些标记后面。出于某种神秘的原因,谷歌地图确定了这一点。它需要与 Google Maps for Android V2 一起使用。
4 回答
Android Maps API v2 于 2016 年 6 月 27 日发布的 v9.2.0 现在支持 z-index - 请参阅https://developers.google.com/maps/documentation/android-api/releases#june_27_2016上的公告。
因此,请确保您的地图/播放服务版本设置为 v9.2.0 或更高版本build.gradle
:
compile 'com.google.android.gms:play-services-maps:9.2.0'
z-index 文档如下(来自https://developers.google.com/maps/documentation/android-api/marker#marker_z-index):
z-index 指定此标记相对于地图上其他标记的堆叠顺序。具有高 z-index 的标记被绘制在具有较低 z-index 的标记之上。默认 z-index 值为 0。
标记始终绘制在切片图层和其他非标记叠加层(地面叠加层、折线、多边形和其他形状)之上,而不管其他叠加层的 z-index。与其他叠加层相比,标记被有效地视为位于单独的 z-index 组中。
您可以在将标记添加到地图时设置索引:
map.addMarker(new MarkerOptions()
.position(new LatLng(10, 10))
.title("Marker z1")
.zIndex(1.0f));
...或Marker.setZIndex()
在创建标记后使用。
下面是有关 z-index 对点击事件影响的更多文档(来自https://developers.google.com/maps/documentation/android-api/marker#marker_click_events):
- 当用户单击一组标记时,将为具有最高 z-index 的标记触发单击事件。
- 每次点击最多触发一个事件。换句话说,点击不会传递到具有较低 z-index 值的标记或其他叠加层。
- 单击一组标记会导致随后的单击循环通过该群集,依次选择每个标记。循环的顺序首先优先考虑 z-index,然后是接近点击点。
- 如果用户在集群附近之外点击,API 会重新计算集群并重置点击周期的状态,使其从头开始。
- 在重新开始循环之前,单击事件会通过标记簇落到其他形状和叠加层。
- 与其他叠加层或形状(折线、多边形、圆形和/或地面叠加层)相比,标记被有效地视为位于单独的 z-index 组中,而与其他叠加层的 z-index 无关。如果多个标记、叠加层或形状相互叠加,则单击事件首先在标记簇中循环,然后根据其 z-index 值触发其他可单击的叠加层或形状。
找到了解决方案:
Marker.showInfoWindow();
这不是最佳选择,因为它会导致信息窗口出现在标记上方,但总比没有好。
不幸的是,Markers
在 Android 版 Google Map API V2 中没有 z 索引。他们处理自己的抽奖顺序
我相信这篇文章是Google Maps v2 Marker zOrdering-Set to top的副本。Bastien Beurier 的回答使用 Marker.showInfoWindow() 解决方案,并且还演示了如果您实际上不希望出现信息窗口,如何创建 0x0 信息窗口。
另请注意我在下面关于将 TextView 添加到 LinearLayout 的答案的评论。