В этом примере после создания маркера при длительном нажатии на камеру перемещение слушателя обновляет положение вновь добавленного маркера в центре.
Эффект - это то, что вы описали в том, что одним и тем же длительным нажатием (все еще удерживая нажатой) маркер создается и перемещается в центр камеры, и карта перемещается (вместе с маркером) как обычно.
При отпускании длинного нажатия маркер находится в своем окончательном положении.
Неактивный слушатель используется для остановки обновления вновь добавленного маркера при перемещениях камеры. Маркер по-прежнему можно перетаскивать самостоятельно с помощью обычных событий перетаскивания маркера (после начального длительного нажатия).
Применимые части:
private Marker addedMarker;
@Override
public void onMapReady(GoogleMap map) {
gMap = map;
// ... other stuff...
// on long press, create a marker at the press point, set the
// the marker as draggable and record the new marker object.
//
// The camera moves will use the marker object to move it (while still
// in long press mode).
gMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng lng) {
Log.d(TAG,"On long click");
MarkerOptions mo = new MarkerOptions();
mo.position(lng).draggable(true);
addedMarker = gMap.addMarker(mo);
}
});
// If the added marker is still valid then update its position to
// camera center.
gMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
LatLng pos = gMap.getCameraPosition().target;
if (addedMarker != null) {
addedMarker.setPosition(pos);
}
}
});
// When the long-press drag stops then stop updating the newly added
// marker. The marker can still be dragged on its own as a result of
// the draggable setting.
gMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
addedMarker = null;
}
});
}
Видео выше - трудно сказать, но маркер создается, удерживая длинное нажатие, а камера перемещается, продолжая удерживать длинное нажатие.
Длительное нажатие отпускается, и маркер останавливается - и движения карты продолжают работать как обычно. В этот момент маркер можно перемещать самостоятельно обычными методами.