2013-07-26 17 views
7

Voglio dire se faccio clic sul contrassegno OnMarkerClickListener è stato chiamato, quindi il OnMapClickListener no. Anche se ho impostato l'oggetto indicatore mMap.setOnMarkerClickListener(null);, maschera tutti gli eventi click per la mappa e gli oggetti sottostanti. Come posso impostare Marker trasparente per tutte le interruzioni dell'utente?API di Google Maps v2: come rendere i marcatori non selezionabili?

risposta

4

Questa è effettivamente una "limitazione" dei marcatori della versione 3.1.59 della libreria.

Se hai davvero bisogno che siano marcatori, invia una richiesta di funzionalità su gmaps-api-issues per MarkerOptions.clickable e Marker.setClickable.

Se è possibile, considerare l'utilizzo di altri oggetti visivi, ad es. GroundOverlay. L'unico problema è che sono tutti in scala con la mappa, a differenza dei marcatori. Il più vicino sarebbe Circle con raggio zero e larghezza di corsa 20-50 dp, ma questo è solo un singolo punto di colore.

4

In base allo docs sui marcatori, se si aggiunge il proprio listener e il metodo onMarkerClick() restituisce false, verrà eseguito il comportamento predefinito.

Quindi, nel onMarkerClick() è sufficiente restituire true e non fare nient'altro per sovrascrivere completamente il valore predefinito.

+0

mio cercato 'onMarkerClick (Marker arg0) {return true;}' ma 'onMapClick' non è ancora stato chiamato. Penso che la spiegazione di docs significhi che se restituisco 'true' non si verificherà alcun comportamento predefinito (infoWindow), solo il mio codice, che pubblico in' onMarkerClick' –

+0

Prova questo: in onMarkerClick aggiungi la riga 'onMapClick (marker.getPosition()) ; ' –

+1

Ci ho pensato. In questo caso sarebbe un grande errore. Farò in questo modo se nessuna altra soluzione non verrà trovata –

4

L'unica soluzione che ho trovato per questo problema è quello di eseguire lo stesso codice in OnMarkerClickListener che avete in OnMapClickListener e tornare false:

getMap().setOnMarkerClickListener(new OnMarkerClickListener() { 

    public boolean onMarkerClick(Marker marker) { 
     onMapClick(marker.getPosition()); 
     return true; 
    } 
}); 
+1

Questa soluzione non funziona perché onMarkerClick ti dà la posizione del marcatore che determina è più vicino al punto in cui hai fatto clic, non dove hai effettivamente fatto clic. – Justin