Google地图v2标记z订单 – 置顶

我知道这个主题有一些线程,但我还没有find一个足够好的解决scheme。

我需要在所有其他标记的顶部放置一个标记。 我该怎么做呢?

我曾尝试在所有其他标记之前和之后添加此标记,但sorting似乎是从地图视图的底部(前)到顶部(后)。 这是不可接受的,因为我想集中在所有标记之前的标记。

我知道,多边形可以zOrdered,但我会更喜欢一个很好风格的graphics!

事实上,你不能在一个标记上订购一个多边形!

“该多边形相对于其他覆盖物(包括多义线,GroundOverlays和TileOverlay,但不包括标记物)绘制的顺序。具有较大z-索引的覆盖图将绘制在具有较小z-索引的覆盖图上。相同的z-index值是任意的,默认值是0。 – https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Polygon

有没有人有任何想法呢?

Solutions Collecting From Web of "Google地图v2标记z订单 – 置顶"

如果你真的显示一个InfoWindow,Aiden Fry的答案是有效的。 如果你不这样做,标记不会到达前面。 无论如何,这是一个黑客,让它来到前面:

创build一个显示0dp信息窗口的自定义InfoWindowAdapter:

public class MapWindowAdapter implements GoogleMap.InfoWindowAdapter { private Context context = null; public MapWindowAdapter(Context context) { this.context = context; } // Hack to prevent info window from displaying: use a 0dp/0dp frame @Override public View getInfoWindow(Marker marker) { View v = ((Activity) context).getLayoutInflater().inflate(R.layout.no_info_window, null); return v; } @Override public View getInfoContents(Marker marker) { return null; } } 

这是布局的代码:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="0dp" android:layout_height="0dp"> </LinearLayout> 

设置地图时,设置适配器和自定义InfoWindowAdapter和OnMarkerClickListener(使用showInfoWindow并按照AIden Fry的build议返回true):

 mMap.setInfoWindowAdapter(new MapWindowAdapter(this)); //Call showInfoWindow to put marker on top of others. myMarker.showInfoWindow(); 

这不是很漂亮,但我没有find任何其他方式来处理z索引,而不使用信息窗口。

这已添加到Google Play Services 9.2 ( 2016年6月27日 )

新的MarkerOptions.zIndex()设置标记相对于地图上其他标记的堆栈顺序。 阅读更多关于marker-z-index和z-index对点击事件的影响。 ( 问题4688 )

虽然不是完美的解决scheme! 我已经想通过消耗onMarkerClick事件显示所有其他标记选定(点击)标记。 返回TRUE会消耗这个事件,所以我们必须做showInfoWindow并且放大到中心

  @Override public boolean onMarkerClick(Marker marker) { //Manually open the window marker.showInfoWindow(); //Animate to center sMapFrag_v2.getMap().animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()); //Consume the method return true; }