studio - Cómo cambiar la posición de un marcador en un Android Map v2
markeroptions (4)
Necesito hacer lo siguiente: Tengo un Marcador en el mapa y necesito cambiar su posición. Así que intenté lo siguiente:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
map.addMarker(a);
a.position(new LatLng(50,5));
donde el mapa es un mapa de GoogleMap
. Creo que tengo que refrescar el mapa o algo igual?
Definir "marcador" fuera de la función. por primera vez, será nulo y se ejecutará la condición "si". por segunda vez se ejecutará "else".
Marker marker = null;
protected void onPostExecute(Coordinates coordinates) {
LatLng latLong = new LatLng("lat", "long");
if (marker == null) {
MarkerOptions options = new MarkerOptions().position(latLong)
.title("Marker Title");
marker = mMap.addMarker(options);
}
else {
marker.setPosition(latLong);
}
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLong));
mMap.animateCamera(CameraUpdateFactory.zoomTo(16f));
}
Encontré la solución, necesito hacerlo así:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));
Hay un ejemplo de marcador móvil en la aplicación de demostración google map v2 .. En el archivo adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/example/mapdemo/MarkerDemoActivity.java
(4.2. 2 ejemplos)
Aquí el código para mover un marcador:
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);
}
}
}
});
}
este código animará el marcador de un geopunto a otro.
La mayoría de las respuestas en sugieren usar remove()
para eliminar el marcador y luego crear uno nuevo usando addMarker
. En lugar de hacer eso, simplemente guarde el marcador una vez en una variable de tipo Marker
y luego actualice su ubicación.
MarkerOptions a = new MarkerOptions().position(new LatLng(50,6)));
myMarker = mGoogleMap.addMarker(a);
Y luego, en lugar de eliminar y volver a crear un marcador, simplemente use
myMarker.setPosition(newLatLng);
Espero que esto ayude !!