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

Как изменить положение маркера на карте Android v2

Мне нужно сделать следующее: У меня есть маркер на карте, и мне нужно изменить его положение. Поэтому я попробовал следующее:

MarkerOptions a = new MarkerOptions()
            .position(new LatLng(50,6)));
        map.addMarker(a);
        a.position(new LatLng(50,5));

где map является GoogleMap. Я думаю, что мне нужно обновить карту или что-то равное?

4b9b3361

Ответ 1

Нашел решение, нужно сделать это вот так:

MarkerOptions a = new MarkerOptions()
    .position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));

Ответ 2

Есть один пример движущегося маркера в демонстрационном приложении google map v2.. В файле adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.java (4.2.2 примеры)

Здесь код для перемещения маркера:

 public void animateMarker(final Marker marker, final LatLng toPosition,
            final boolean hideMarker) {
        final Handler handler = new Handler();
        final long start = SystemClock.uptimeMillis();
        Projection proj = mGoogleMapObject.getProjection();
        Point startPoint = proj.toScreenLocation(marker.getPosition());
        final LatLng startLatLng = proj.fromScreenLocation(startPoint);
        final long duration = 500;

        final Interpolator interpolator = new LinearInterpolator();

        handler.post(new Runnable() {
            @Override
            public void run() {
                long elapsed = SystemClock.uptimeMillis() - start;
                float t = interpolator.getInterpolation((float) elapsed
                        / duration);
                double lng = t * toPosition.longitude + (1 - t)
                        * startLatLng.longitude;
                double lat = t * toPosition.latitude + (1 - t)
                        * startLatLng.latitude;
                marker.setPosition(new LatLng(lat, lng));

                if (t < 1.0) {
                    // Post again 16ms later.
                    handler.postDelayed(this, 16);
                } else {
                    if (hideMarker) {
                        marker.setVisible(false);
                    } else {
                        marker.setVisible(true);
                    }
                }
            }
        });
    }

этот код будет анимировать маркер с одного геосегмента на другой.

Ответ 3

Большинство ответов на StackOverflow предлагают использовать remove() для удаления маркера, а затем создать новый с помощью addMarker. Вместо этого просто сохраните маркер один раз в переменной типа Marker, а затем обновите его местоположение.

MarkerOptions a = new MarkerOptions().position(new LatLng(50,6))); 
myMarker = mGoogleMap.addMarker(a);

А затем вместо удаления и повторного создания маркера просто используйте

myMarker.setPosition(newLatLng);  

Надеюсь, это поможет!