2012-12-03 12 views
63

Nella nuova API di Google Maps per Android, possiamo add a marker, ma non c'è modo di rimuoverlo (facilmente).Rimuovere un indicatore da un GoogleMap

La mia soluzione è di mantenere i marcatori in una mappa e ridisegnare la mappa quando voglio rimuovere un marcatore, ma non è molto efficiente.

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

Qualcuno ha un'idea migliore?

+0

Perché usate un Runnable() per aggiungere i marcatori? – user3927312

+0

Per farlo sul thread dell'interfaccia utente – Jonas

risposta

163

la firma del metodo per la addMarker è:

public final Marker addMarker (MarkerOptions options) 

Quindi, quando si aggiunge un marcatore per un GoogleMap specificando le opzioni per il marcatore, si dovrebbe salvare l'oggetto Marker che viene restituito (anziché l'oggetto MarkerOptions che hai usato per crearlo). Questo oggetto ti permette di cambiare lo stato del marcatore in seguito. Quando hai finito con il marker, puoi chiamare Marker.remove() per rimuoverlo dalla mappa.

Per inciso, se si desidera solo nasconderlo temporaneamente, è possibile attivare la visibilità dell'indicatore chiamando Marker.setVisible(boolean).

+1

Accidenti, mi sono perso. Grazie ! – Jonas

+0

Anche io mi sono perso. –

+0

Grazie mille per aver reso la mia giornata. –

16

per cancellare tutti scarabocchi nella mappa utilizzare

map.clear() 
+9

Questo cancella tutti gli overlay sulla mappa, non solo un marker come suggerisce la domanda: – Emzor

+0

Grazie, funziona perfettamente – Neela

-1

Creare array con tutti i marcatori su aggiungere in carta.

Più tardi, l'uso:

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

1. Se si desidera rimuovere un marker si può fare come marker.remove(); in alternativa si può anche nascondere il marcatore invece di rimuoverlo come

marker.setVisible(false); 

e renderlo visibile in seguito, quando necessario.
2. Tuttavia, se si desidera rimuovere tutti i marcatori dalla mappa Usamap.clear();
Nota:map.clear(); rimuoverà anche Polylines, Circles ecc
3. Se non si desidera rimuovere Polylines, Circles ecc rispetto utilizzare un ciclo per la lunghezza del marcatore (se si dispone di più marcatori) per rimuovere quelli Check out the Example hereO impostarli Visibile falso E non utilizzare map.clear(); in tal caso.

12

Aggiungere il marcatore alla mappa come questo

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

Allora sarete in grado di utilizzare il metodo Remove, rimuoverà solo marcatore

markerName.remove(); 
2

se marcatore esiste rimuovere l'ultimo marcatore .se marcatore non esiste creare marcatore corrente

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

Fai una variabile globale per tenere traccia di marcatore

private Marker currentLocationMarker; 

// Rimuovere il vecchio marcatore

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

// Aggiungere marcatore aggiornate e sposta la fotocamera

  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

Questo non rimuoverà l'icona del marcatore – Simon

1

utilizzare il seguente codice:

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

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

una volta che si fa clic su "un marcatore", è possibile rimuoverlo.

0

solo una nota, qualcosa che ho sprecato ore rintracciare stasera ...

Se si decide di tenere su un marcatore per qualche motivo, dopo aver rimosso da una mappa ... GetTag ritornerà NULL , anche se i restanti valori di acquisizione torneranno con i valori impostati su quando il marcatore è stato creato ...

Il valore TAG è impostato su NULL se si rimuove un indicatore e si tenta di fare riferimento.

sembra un bug per me ...