目前,Android Map v2会在点击后捕捉到标记位置。我想禁用此行为,但看不到任何选项。
有人知道如何解决这个问题吗?
答案 0 :(得分:51)
根据我从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;
}
});
这是未经测试的代码,但这可能是一个可行的解决方案。
谢谢, DMAN
答案 1 :(得分:1)
看来我们应该可以执行以下操作,但由于this bug,它不起作用,因为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 Developer Guide中所述),所以如果点击当前打开信息窗口的标记,我们只需要隐藏信息窗口。