Ответ 1
Нашел решение, нужно сделать это вот так:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));
Мне нужно сделать следующее: У меня есть маркер на карте, и мне нужно изменить его положение. Поэтому я попробовал следующее:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
map.addMarker(a);
a.position(new LatLng(50,5));
где map является GoogleMap
. Я думаю, что мне нужно обновить карту или что-то равное?
Нашел решение, нужно сделать это вот так:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));
Есть один пример движущегося маркера в демонстрационном приложении google map v2.. В файле adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/example/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);
}
}
}
});
}
этот код будет анимировать маркер с одного геосегмента на другой.
Большинство ответов на StackOverflow предлагают использовать remove()
для удаления маркера, а затем создать новый с помощью addMarker
. Вместо этого просто сохраните маркер один раз в переменной типа Marker
, а затем обновите его местоположение.
MarkerOptions a = new MarkerOptions().position(new LatLng(50,6)));
myMarker = mGoogleMap.addMarker(a);
А затем вместо удаления и повторного создания маркера просто используйте
myMarker.setPosition(newLatLng);
Надеюсь, это поможет!