Come cambiare la posizione di un indicatore su una mappa Android v2

Devo fare quanto segue: ho un indicatore sulla mappa e ho bisogno di cambiarne la posizione. Così ho provato il seguente:

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

dove map è un GoogleMap . Penso di dover aggiornare la mappa o qualcosa di simile?

Trovato la soluzione, è necessario farlo in questo modo:

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

C’è un esempio di spostamento del marker nell’app demo google map v2. Nel file adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.java (4.2. 2 esempi)

Ecco il codice per spostare un marker:

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

questo codice animerà il marcatore da un geopoint a un altro.

La maggior parte delle risposte su StackOverflow suggeriscono di usare remove() per rimuovere il marker e quindi crearne uno nuovo usando addMarker . Invece di farlo, è sufficiente salvare il marcatore una volta in una variabile di tipo Marker e quindi aggiornare la sua posizione.

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

E poi invece di rimuovere e ricreare un marcatore, basta usare

 myMarker.setPosition(newLatLng); 

Spero che questo ti aiuti !!

Definisci “marker” al di fuori della funzione. per la prima volta, sarà nullo e verrà eseguita la condizione “se”. per la seconda volta “else” sarà eseguito.

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