当前,Android Map v2 在单击后会捕捉到标记位置。我想禁用此行为,但看不到执行此操作的选项。
有人知道如何解决吗?
当前,Android Map v2 在单击后会捕捉到标记位置。我想禁用此行为,但看不到执行此操作的选项。
有人知道如何解决吗?
根据我从 Markers 中读到的内容 - Google Maps Android API ( https://developers.google.com/maps/documentation/android/marker#marker_click_events )
标记点击事件
您可以使用 OnMarkerClickListener 来侦听标记上的点击事件。要在地图上设置此侦听器,请调用 GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)。当用户单击标记时,将调用 onMarkerClick(Marker) 并将标记作为参数传递。此方法返回一个布尔值,指示您是否已使用该事件(即,您想要抑制默认行为)。如果它返回 false,那么除了您的自定义行为之外,还将发生默认行为。标记单击事件的默认行为是显示其信息窗口(如果可用)并移动相机以使标记位于地图的中心。
您可能会覆盖此方法并让它仅打开标记并返回 true 以使用事件。
// Since we are consuming the event this is necessary to
// manage closing opened markers before opening new ones
Marker lastOpened = null;
mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
// Check if there is an open info window
if (lastOpened != null) {
// Close the info window
lastOpened.hideInfoWindow();
// Is the marker the same marker that was already open
if (lastOpened.equals(marker)) {
// Nullify the lastOpened object
lastOpened = null;
// Return so that the info window isn't opened again
return true;
}
}
// Open the info window for the marker
marker.showInfoWindow();
// Re-assign the last opened such that we can close it later
lastOpened = marker;
// Event was handled by our code do not launch default behaviour.
return true;
}
});
这是未经测试的代码,但这可能是一个可行的解决方案。
谢谢, 曼
看来我们应该能够执行以下操作,但是由于这个错误,它不起作用,因为marker.isInfoWindowShown()
总是返回 false:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
if (marker.isInfoWindowShown()) {
marker.hideInfoWindow();
} else {
marker.showInfoWindow();
}
return true;
}
});
但是,以下具有相同的效果并且确实有效:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
Marker currentShown;
public boolean onMarkerClick(Marker marker) {
if (marker.equals(currentShown)) {
marker.hideInfoWindow();
currentShown = null;
} else {
marker.showInfoWindow();
currentShown = marker;
}
return true;
}
});
因为一次只显示一个信息窗口(如Google Maps API v2 开发人员指南中所述),我们只需要在单击其信息窗口当前打开的标记时隐藏信息窗口。