2013-04-09 4 views
21

Ho bisogno di fare quanto segue: Ho un indicatore sulla mappa e ho bisogno di cambiare la posizione di esso. Così ho provato la seguente:Come modificare la posizione di un indicatore su una mappa Android v2

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

cui mappa è una GoogleMap. Penso di dover aggiornare la mappa o qualcosa di simile?

risposta

58

trovato la soluzione, hanno bisogno di fare in questo modo:

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

ma m.setPosition non aggiorna il marker sulla mappa !! – dvrm

+0

@dvrm L'ho controllato e cambia la posizione del marcatore sulla mappa. Cosa intendi per aggiornamento? – arniotaki

+9

In questo frammento, dov'è il vecchio marcatore? Ne stai creando uno nuovo ... – mischka

20

C'è un esempio di movimento marcatore in Google Map v2 demo app .. Nel file di adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.java (4.2.2 esempi)

Qui 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.

+0

che cos'è 'mGoogleMapObject'? –

5

La maggior parte delle risposte su StackOverflow suggerisce di utilizzare remove() per rimuovere l'indicatore e quindi crearne uno nuovo utilizzando 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, è sufficiente utilizzare

myMarker.setPosition(newLatLng); 

Spero che questo aiuti !!