Aid*_*Fry 23 android z-order marker google-maps-android-api-2
我知道在这个主题上有一些线索,但我还没有找到一个足够好的解决方案.
我需要在所有其他标记的顶部放置一个标记.我该怎么做呢?
我尝试在所有其他标记之前和之后添加此标记,但是顺序似乎是从地图视图的底部(前面)到顶部(后面).这是不可接受的,因为我想以所有标记前面的标记为中心.
我知道Polygons可以zorrdered但我更喜欢一个漂亮的图形!
实际上你不能在标记上订购多边形!
"相对于其他叠加层绘制此多边形的顺序,包括Polylines,GroundOverlays和TileOverlays,但不包括Markers.具有较大z-index的叠加层将绘制在具有较小z-indices的叠加层上.相同的z-index值是任意的.默认值为0." - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Polygon
有没有人对此有任何想法?
Bas*_*ier 41
如果你实际显示InfoWindow,Aiden Fry的答案是有效的.如果不这样做,标记将不会出现在前面.无论如何,这是一个让它走到前面的黑客:
创建一个显示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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是布局的代码:
<?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>
Run Code Online (Sandbox Code Playgroud)
设置地图时,设置适配器和自定义InfoWindowAdapter和OnMarkerClickListener(使用showInfoWindow并返回true,如AIden Fry建议的那样):
mMap.setInfoWindowAdapter(new MapWindowAdapter(this));
//Call showInfoWindow to put marker on top of others.
myMarker.showInfoWindow();
Run Code Online (Sandbox Code Playgroud)
这不是很漂亮,但我没有找到任何其他方法来处理z-indexing而不使用信息窗口.
pas*_*ssy 18
这是在Google Play Services 9.2中添加的(2016年6月27日)
new
MarkerOptions.zIndex()设置标记相对于地图上其他标记的堆栈顺序.阅读有关标记z索引和z-index对点击事件的影响的更多信息.(问题4688)
虽然不是完美的解决方案!我已经弄清楚如何通过使用 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14348 次 |
| 最近记录: |