2012-12-03 14 views
63

In der neuen Google Maps API für Android können wir add a marker, aber es gibt keine Möglichkeit, (einfach) zu entfernen.Entfernen Sie einen Marker von einer GoogleMap

Meine Lösung ist, die Markierungen in einer Karte zu behalten und die Karte neu zu zeichnen, wenn ich einen Marker entfernen möchte, aber es ist nicht sehr effizient.

private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>(); 

private void add(String name, LatLng ll) { 
    final MarkerOptions marker = new MarkerOptions().position(ll).title(name); 
    mMarkers.put(name, marker); 

    runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     mMap.addMarker(marker); 
    } 
    }); 
} 

private void remove(String name) { 
    mMarkers.remove(name); 

    runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     mMap.clear(); 

     for (MarkerOptions item : mMarkers.values()) { 
     mMap.addMarker(item); 
     } 
    } 
    }); 
} 

Hat jemand eine bessere Idee?

+0

Warum verwenden Sie ein Runnable(), um die Markierungen hinzufügen? – user3927312

+0

Um es auf dem UI-Thread zu tun – Jonas

Antwort

163

Die Methodensignatur für addMarker ist:

public final Marker addMarker (MarkerOptions options) 

Also, wenn Sie eine Marke zu einem GoogleMap durch Angabe der Optionen für die Markierung hinzufügen möchten, sollten Sie die Marker Objekt speichern, die (anstelle des MarkerOptions Objekt zurückgegeben die du benutzt hast, um es zu erstellen). Mit diesem Objekt können Sie den Markierungszustand später ändern. Wenn Sie mit der Markierung fertig sind, können Sie Marker.remove() aufrufen, um sie aus der Karte zu entfernen.

Wenn Sie es nur vorübergehend ausblenden möchten, können Sie die Sichtbarkeit des Markers ändern, indem Sie aufrufen.

+1

Verdammt habe ich das verpasst. Vielen Dank ! – Jonas

+0

Ich habe es auch vermisst. –

+0

Vielen Dank, Sie haben meinen Tag gemacht. –

16

alle Kritzeleien in der Karte mit allen Markierungen

map.clear() 
+9

Dies löscht alle Überlagerungen auf der Karte, nicht nur eine Markierung, wie die Frage suggeriert – Emzor

+0

Vielen Dank, das funktioniert super – Neela

-1

erstellen Array in der Karte auf hinzufügen verwenden löschen.

Später Verwendung:

Marker temp = markers.get(markers.size() - 1); 
temp.remove(); 
1

1. Wenn Sie eine Markierung entfernen möchten, können Sie es tun, wie marker.remove(); alternativ können Sie auch die Markierung verstecken, anstatt es als

zu entfernen
marker.setVisible(false); 

und später bei Bedarf sichtbar machen.
2. Allerdings, wenn Sie alle Markierungen aus der Karte Verwendenmap.clear();
Hinweis entfernen möchten:map.clear(); auch Polylines, Circles usw.
3. entfernen Wenn Sie nicht Polylines, Circles usw. entfernen möchten als Verwenden Sie eine Schleife zur Länge der Markierung (wenn Sie mehrere Markierungen haben), um diese zu entfernen Check out the Example hereODER setzen Sie sie Sichtbar falsch Und verwenden Sie in diesem Fall nicht map.clear();.

12

den Marker auf der Karte hinzufügen, ähnliche

Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title")); 

Dann werden Sie in der Lage sein, das Entfernen Methode zu verwenden, wird es nur, dass die Marker

markerName.remove(); 
2

zu entfernen, wenn Marker letzte Markierung vorhanden entfernen .wenn Marker existiert nicht aktuellen Marker erstellen

Marker currentMarker = null; 
if (currentMarker!=null) { 
    currentMarker.remove(); 
    currentMarker=null; 
} 

if (currentMarker==null) { 
    currentMarker = mMap.addMarker(new MarkerOptions().position(arg0). 
    icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); 
} 
0

eine globale Variable Make Spur von Marker zu halten

private Marker currentLocationMarker; 

// entfernen alte Markierung

  if (null != currentLocationMarker) { 
       currentLocationMarker.remove(); 
      } 

// aktualisiert Marker hinzufügen in und Bewegen Sie die Kamera

  currentLocationMarker = mMap.addMarker(new MarkerOptions().position(
        new LatLng(getLatitude(), getLongitude())) 
        .title("You are now Here").visible(true) 
        .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front)) 
        .snippet("Updated Location")); 

      currentLocationMarker.showInfoWindow(); 
+0

Dies wird nicht entfernen Sie das Symbol des Markers – Simon

1

den folgenden Code verwenden:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
     @Override 
     public boolean onMarkerClick(Marker marker) { 

      marker.remove(); 
      return true; 
     } 
    }); 

, sobald Sie auf klicken Sie auf "Marker", können Sie es entfernen.

0

Nur ein Hinweis, etwas, das ich verschwendete Stunden heute Abend das Aufspüren von ...

Wenn Sie sich entscheiden, aus irgendeinem Grund auf einen Marker zu halten, nachdem Sie es von einer Karte entfernt haben ... getTag wird NULL zurückgeben , obwohl die verbleibenden get-Werte mit den Werten zurückkommen, die Sie beim Erstellen des Markers festgelegt haben ...

Der TAG-Wert wird auf NULL gesetzt, wenn Sie jemals einen Marker entfernen und dann versuchen, darauf zu verweisen.

Es scheint ein Fehler zu mir ...

Verwandte Themen