2013-06-08 6 views
17

Quando si utilizza Google Map API V3 posso aggiungere proprietà personalizzata nel seguente modo:Aggiunta di proprietà personalizzata al marcatore (Google Map Android API V2)

var marker = new google.maps.Marker({ 
    position: userLocation, 
    map: myGoogleMap, 
    animation: google.maps.Animation.DROP, 
    icon: avatar, 
    title: userName, 
    customProperty1: bla, 
    customProperty2: bla, 
    customProperty3: bla, 
    ... 

});

Mi chiedo se posso fare lo stesso per l'API V2 Android, la ragione per cui voglio farlo è che ogni finestra di informazioni di ciascun marcatore deve conoscere alcune informazioni di quel marcatore. E sto cercando di raggiungere questo obiettivo in render funzione qui sotto:

private void render(Marker marker, View view) { 
     int badge = R.drawable.android_face; 

     if (marker.customProperty) 
     //here I need to know this property to decide which image to use   
         badge = R.drawable.bla; 

     ((ImageView) view.findViewById(R.id.badge)) 
        .setImageResource(badge); 

} 
+0

prova qui http://stackoverflow.com/questions/14811579/android-map-api-v2-custom-marker-with-imageview – user2725663

risposta

41

Non è possibile estendere direttamente Marker, perché è una classe finale, ma avete alcune opzioni:

0) Come di Google Mappe Android API v2 versione 9.4.0, è possibile utilizzare Marker::getTag e Marker::setTag. Questa è probabilmente l'opzione preferita.

1) Creare una mappa per memorizzare tutte le informazioni aggiuntive:

private Map<Marker, MyData> allMarkersMap = new HashMap<Marker, MyData>(); 

Quando si crea un marcatore, aggiungerlo a questa mappa con i vostri dati:

Marker marker = map.addMarker(...); 
allMarkersMap.put(marker, myDataObj); 

Più tardi nella funzione render :

MyData myDataObj = allMarkersMap.get(marker); 
if (myDataObj.customProp) { ... 

2) Un altro modo sarebbe utilizzare Marker.snippet per memorizzare tutte le informazioni come String e successivamente analizzarlo, ma questa è una soluzione brutta e non gestibile.

3) Passare da semplice API Android di Google Maps v2 a Android Maps Extensions.

Questo è molto simile al punto 1, ma è possibile memorizzare direttamente MyData nel marcatore, utilizzando

marker.setData(myDataObj); 

e versioni successive:

MyData myDataObj = (MyData) marker.getData(); 
+1

thx ~ Ho scelto il primo metodo alla fine e funziona. Qualche idea sul perché la v2 non consenta l'estensione? solo curioso .. – Arch1tect

+0

@ Arch1tect Scelta del design basata sulla decisione di utilizzare un processo separato per fare un lavoro reale. Gli oggetti con cui interagisci non sono altro che proxy. –

+0

@ MaciejGórski Pls. controlla la mia domanda come posso ottenere PropertyID a click pin percular [http://stackoverflow.com/questions/20784094/get-custom-class-data-information-on-map-v2-popupclick-event-in-android] (http://stackoverflow.com/questions/20784094/get-custom-class-data-information-on-map-v2-popupclick-event-in-android) –