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
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.
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.
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;
}
});
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
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' –
Prova questo: in onMarkerClick aggiungi la riga 'onMapClick (marker.getPosition()) ; ' –
Ci ho pensato. In questo caso sarebbe un grande errore. Farò in questo modo se nessuna altra soluzione non verrà trovata –