現在Android Map v2はクリック後にマーカーの位置にスナップします。この動作を無効にしたいのですが、実行するオプションが表示されません。
誰かがそれを修正する方法を知っていますか?
マーカーから読み取ったものに基づいて-Googleマップ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
次のことができるはずですが、 このバグ のため、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開発者ガイド に記載されているように、一度に1つの情報ウィンドウのみが表示されるため、情報ウィンドウが現在開いているマーカーがクリックした。