2013-04-09 28 views
21

Muszę wykonać następujące czynności: Mam znacznik na mapie i muszę zmienić jego pozycję. Próbowałem więc:Jak zmienić pozycję znacznika na mapie Androida v2

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

gdzie mapa to GoogleMap. Myślę, że muszę odświeżyć mapę lub coś równego?

Odpowiedz

58

Znaleziono rozwiązanie, trzeba zrobić to tak:

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

ale m.setPosition nie aktualizuje znacznika na mapie !! – dvrm

+0

@dvrm Sprawdziłem i zmienia pozycję znacznika na mapie. Co masz na myśli przez aktualizację? – arniotaki

+9

W tym fragmencie, gdzie jest stary znacznik? Tworzysz nowe ... – mischka

20

Jest jeden przykład przesuwając znacznik w Google Map v2 aplikacji demo .. W pliku adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.java (4.2.2 przykłady)

Tutaj kod do przenoszenia znacznika:

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

ten kod będzie animował znacznik z jednego punktu do drugiego.

+0

czym jest "mGoogleMapObject"? –

5

Większość odpowiedzi na temat StackOverflow sugeruje użycie remove() do usunięcia markera, a następnie utworzenia nowego za pomocą addMarker. Zamiast tego, po prostu zapisz znacznik raz w zmiennej typu Marker, a następnie zaktualizuj jej lokalizację.

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

A potem zamiast usuwania i ponownego tworzenia znacznika, wystarczy użyć

myMarker.setPosition(newLatLng); 

nadzieję, że pomoże !!

Powiązane problemy