2013-02-08 16 views
23

So che ci sono alcuni argomenti su questo argomento ma non ho ancora trovato una soluzione abbastanza buona.Google Maps v2 Marker zOrdering - Imposta in cima

HO BISOGNO di mettere un segnalino sopra a tutti gli altri segnalini. Come faccio a fare questo?

Ho provato ad aggiungere questo indicatore prima e dopo tutti gli altri marcatori, tuttavia l'ordine sembra essere dal basso (anteriore) a quello superiore (posteriore) sulla vista mappa. Questo non è accettabile in quanto voglio centrare su un marcatore che si trova di fronte a tutti i segnalini.

So che i poligoni possono essere ordinati ma preferirei un grafico ben disegnato!

In realtà non è possibile ordinare un poligono su un marker!

"L'ordine in cui questo poligono viene disegnato rispetto ad altre sovrapposizioni, tra cui polilinee, GroundOverlay e TileOverlays, ma non Marker. Una sovrapposizione con un più ampio indice z è tracciata su sovrapposizioni con indici z più piccoli. delle sovrapposizioni con lo stesso valore z-index è arbitrario, il valore predefinito è 0. " - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Polygon

Qualcuno ha qualche idea su questo?

risposta

1

Anche se non è la soluzione perfetta! Ho capito come mostrare un marcatore selezionato (tappato) su tutti gli altri marcatori consumando l'evento onMarkerClick. Tornando TRUE consumerà questo evento, quindi dobbiamo fare lo showInfoWindow e zoom per centrare

@Override 
    public boolean onMarkerClick(Marker marker) { 

     //Manually open the window 
     marker.showInfoWindow(); 

     //Animate to center 
     sMapFrag_v2.getMap().animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()); 

     //Consume the method 
     return true; 
    } 
40

risposta di Aiden Fry funziona se effettivamente visualizzare un InfoWindow. Se non lo fai, il marcatore non arriverà in primo piano. Ecco un trucco per farlo venire al fronte in ogni caso:

Creare un InfoWindowAdapter personalizzato che visualizza una finestra di informazioni 0DP:

public class MapWindowAdapter implements GoogleMap.InfoWindowAdapter { 
    private Context context = null; 

    public MapWindowAdapter(Context context) { 
     this.context = context; 
    } 

    // Hack to prevent info window from displaying: use a 0dp/0dp frame 
    @Override 
    public View getInfoWindow(Marker marker) { 
     View v = ((Activity) context).getLayoutInflater().inflate(R.layout.no_info_window, null); 
     return v; 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 
     return null; 
    } 
} 

Qui è il codice per il layout:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="0dp" 
       android:layout_height="0dp"> 
</LinearLayout> 

Quando imposti la tua mappa, imposta l'adattatore e l'InfoWindowAdapter personalizzato e OnMarkerClickListener (usando showInfoWindow e restituendo true come consigliato AIden Fry):

mMap.setInfoWindowAdapter(new MapWindowAdapter(this)); 

//Call showInfoWindow to put marker on top of others. 
myMarker.showInfoWindow(); 

Questo non è bello, ma non ho trovato nessun altro modo per gestire z-indexing senza usare info windows.

+0

Questa è la risposta giusta. Che vergogna dover fare questo hack sporco per un compito così fondamentale. – lukas

+0

E btw, l'impostazione del titolo non è richiesta. – lukas

+4

Questo funziona. Non è necessario implementare setOnMarkerClickListener, però. Basta impostare InfoWindowAdapter come descritto sopra e chiamare showInfoWindow per impostare il marcatore in cima. –

14

Questo è stato aggiunto nel Google Play Services 9,2 (June 27, 2016)

Il nuovo MarkerOptions.zIndex() imposta l'ordine di sovrapposizione di un marcatore in relazione ad altri indicatori sulla mappa. Ulteriori informazioni su marker z-indexes e l'effetto di z-index sugli eventi di clic. (Issue 4688)

+0

Sfortunatamente Xamarin no supporta ancora questa proprietà! Non pertinente alla domanda posta, ma non vale niente ... – Justin

+0

Sono venuto qui per una soluzione Xamarin, ma detto questo @Justin non vedo dove la domanda dell'OP coinvolga specificamente Xamarin. Non vedo l'ora che Xamarin lo faccia nella loro API. –

Problemi correlati