В настоящее время Android Map v2 после щелчка привязывается к местоположению маркера. Я хочу отключить это поведение, но не вижу никаких параметров для этого.
Кто-нибудь знает, как это исправить?
В настоящее время Android Map v2 после щелчка привязывается к местоположению маркера. Я хочу отключить это поведение, но не вижу никаких параметров для этого.
Кто-нибудь знает, как это исправить?
Основываясь на том, что я читал с маркеров - API Android Google Maps (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
Похоже, что мы должны сделать следующее, но из-за эта ошибка, это не работает, потому что marker.isInfoWindowShown()
всегда возвращает ложь:
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), нам нужно только беспокоиться о скрытии информационного окна, если щелкнуть маркер, чье информационное окно в настоящее время открыто.