現在、デフォルトでは、マーカーをタップすると、マップはマーカーを中心に表示されます。それを制御する方法はありますか、いくつかのオフセット値を導入してください。時々少し高いポップアップ情報ウィンドウがあり、上部が途切れないようにマップを配置したいと思います。
質問する
2297 次
2 に答える
3
おそらく、GoogleMap マーカーのクリック イベントをオーバーライドして、そこでカメラを調整できます。
例えば
Maker 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;
// Get the markers current position
LatLng curMarkerPos = marker.getPosition();
// Use the markers position to get a new latlng to move the camera to such that it adjusts appropriately to your infowindows height (might be more or less then 0.3 and might need to subtract vs add this is just an example)
LatLng camMove = new LatLng(curMarkerPos.latitude + 0.3, curMarkerPos.longitude);
// Create a camera update with the new latlng to move to
CameraUpdate camUpdate = CameraUpdateFactory.newLatLng(camMove);
// Move the map to this position
mMap.moveCamera(camUpdate);
// Event was handled by our code do not launch default behaviour.
return true;
}
});
mMap.setOnMapClickListener(new OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
if (lastOpened != null) {
// Hide the last opened
lastOpened.hideInfoWindow();
// Nullify lastOpened
lastOpened == null;
}
// Move the camera to the new position
final CameraPosition cameraPosition = new CameraPosition.Builder().target(point).zoom(mMap.getCameraPosition().zoom).build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
});
このコードはテストされていませんが、少なくとも素晴らしいスタートを切れるはずです。onMarkerClick のデフォルトの動作は、カメラを移動して情報ウィンドウを開くことです。したがって、これをオーバーライドして独自に実装すると、カメラを好きな場所に移動できるようになります。
ありがとう、Dマン
于 2013-01-25T19:47:35.080 に答える
3
マーカークリックのデフォルトの中央移動動作を削除したいだけの人のために、上記の本当に素晴らしい答えを変更しました。
これを setUpMap() に追加します。
mMap.setOnMarkerClickListener(getMarkerClickListener());
次に、メソッドを追加します。
Marker lastOpened = null;
public OnMarkerClickListener getMarkerClickListener() {
return new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
if (lastOpened != null) {
lastOpened.hideInfoWindow();
if (lastOpened.equals(marker)) {
lastOpened = null;
return true;
}
}
marker.showInfoWindow();
lastOpened = marker;
return true;
}
};
}
于 2013-02-06T03:48:57.603 に答える