Android google map, создайте маркер на клике и сразу начните его перетаскивать - PullRequest
0 голосов
/ 20 апреля 2020

В настоящее время я создаю маркеры при длительном нажатии на карте Google в приложении android. Я также перетаскиваю эти маркеры, выполняя стандартное длинное нажатие на маркер, так что он поднимается и становится перетаскиваемым. Обе эти вещи работают нормально. Моя проблема в том, что когда я продолжаю нажимать, после создания и пытаться перетащить, перетаскивается вся карта, а маркер не перемещается.

Это, очевидно, потому что событие касания не запускается на этом новом маркере, что я только что создал. Мне нужно поднять палец, а затем снова нажать и удерживать, чтобы начать перетаскивание.

Есть ли способ создать новый маркер и перевести его в перетаскиваемое состояние с самого начала, чтобы я мог долго нажимать, чтобы создать, а затем сдвиньте его в нужное положение, не прерывая долгое нажатие и не вызывая новое?

1 Ответ

1 голос
/ 20 апреля 2020

В этом примере после создания маркера при длительном нажатии на камеру перемещение слушателя обновляет положение вновь добавленного маркера в центре.

Эффект - это то, что вы описали в том, что одним и тем же длительным нажатием (все еще удерживая нажатой) маркер создается и перемещается в центр камеры, и карта перемещается (вместе с маркером) как обычно.

При отпускании длинного нажатия маркер находится в своем окончательном положении.

Неактивный слушатель используется для остановки обновления вновь добавленного маркера при перемещениях камеры. Маркер по-прежнему можно перетаскивать самостоятельно с помощью обычных событий перетаскивания маркера (после начального длительного нажатия).

Применимые части:

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;
          }
    });

}

Видео выше - трудно сказать, но маркер создается, удерживая длинное нажатие, а камера перемещается, продолжая удерживать длинное нажатие.

Длительное нажатие отпускается, и маркер останавливается - и движения карты продолжают работать как обычно. В этот момент маркер можно перемещать самостоятельно обычными методами.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...