Подтвердить что ты не робот

Google Map API V2 - Как сохранить маркер в центре экрана во время прокрутки карты?

Google Map API V2 - Как сохранить маркер в центре экрана во время прокрутки карты?

Моя цель - позволить пользователю выбрать место. Я использую следующий код для добавления маркера (он из com.example.mapdemo в Android SDK)

mMap.addMarker(new MarkerOptions()
    .position(new LatLng(0, 0))
    .title("Marker"));

Как сохранить маркер в центре экрана, а затем восстановить его?

4b9b3361

Ответ 1

Я не думаю, что вы можете держать маркер в середине экрана и легко плавать. Мое предложение - обмануть вашего пользователя. Добавьте изображение маркера на карту, как кнопку. вы можете поместить его в середине экрана, используя макет xml. Затем, когда ваш пользователь выбирает местоположение, просто извлекайте координаты gps из середины экрана.

На боковой ноте вы можете просто сделать свой маркер перетаскиваемым. Затем пользователь может перетащить его по карте.

mMap.addMarker(new MarkerOptions().position(coordinate)
                    .title("Your Title")
                    .snippet("Please move the marker if needed.")
                    .draggable(true)); 

Ответ 2

Как насчет?

mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
        public void onCameraChange(CameraPosition arg0) {   
                mMap.clear();               
                mMap.addMarker(new MarkerOptions().position(arg0.target));
        }
});

Ответ 3

Вариант 1

Я думаю, что лучшим вариантом является маркер перемещения, когда пользователь перемещает карту...

googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
            @Override
            public void onCameraMove() {
                marker.setPosition(googleMap.getCameraPosition().target);//to center in map
            }
        });
//note marker is global

Вариант 2

или просто, в вашем макете, с относительной компоновкой, поставьте фрагмент, а над значком маркера вы вычислите, что маркер всегда будет посередине карты...

Я думаю, что это сложно, по размеру экранов, но телефон не будет перемещаться каждый раз, когда маркер...

Ответ 4

Это можно было бы сделать, наложив пользовательский вид поверх вашей карты. Вы должны написать класс, который расширяет представление, и вы можете переопределить методы draw() и onTouchEvent() вашего представления, чтобы он рисовал (как выглядит) маркер над верхней частью карты. Когда пользователь устанавливает маркер, вы должны использовать projection для перевода местоположения экрана маркера в LatLong на карте. Затем вы можете установить правильный маркер на карте (который теперь будет привязан к геолокации).

Как вы можете сказать из вышеизложенного, это не самый простой процесс. Я бы предложил перейти к решению doubleA, чтобы упростить реализацию.

Ответ 5

Marker marker;//have a instance variable marker
mMap.setOnCameraChangeListener(new OnCameraChangeListener();
public void onCameraChange(CameraPosition cameraPosition) {   
                MarkerOptions options = new MarkerOptions()
                                        .position(cameraPosition.target);

                 if(marker != null){marker.remove();}
                 marker = mMap.addMarker(options);
}

Это не будет плавным, потому что вызов onCameraChange не вызывается во время промежуточных кадров. Он вызывается только после полной замены камеры.

Ответ 6

Получить ссылку на маркер при вызове addMarker. После перемещения камеры перемещается маркер в положение цель, возвращаемое камерой.

private Marker marker;

public void onMapReady(final GoogleMap googleMap) {
        LatLng sydney = new LatLng(-34, 151);
        MarkerOptions markerOptions = new MarkerOptions().position(sydney).title("Marker in Sydney");
        marker = googleMap.addMarker(markerOptions);
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
            @Override
            public void onCameraMove() {
                final LatLng target = googleMap.getCameraPosition().target;
                marker.setPosition(target);
            }
        });
}

Ответ 7

Это решение

    private GoogleMap mMap;
    private Marker markerCenter;

    @Override
    public void onMapReady(GoogleMap googleMap) {

       mMap = googleMap; 

       MarkerOptions markerOptions = new MarkerOptions();
       markerOptions.position(mMap.getCameraPosition().target);
       markerCenter = mMap.addMarker(markerOptions);

       mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
          public void onCameraMove() {
              markerCenter.setPosition(mMap.getCameraPosition().target);
          }
       });

    }