2013-06-08 10 views
17

Wenn V3 mit Google Map API I benutzerdefinierte Eigenschaft in der folgenden Art und Weise hinzufügen:Hinzufügen von benutzerdefinierten Eigenschaft zu Marker (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, 
    ... 

});

Ich frage mich, ob ich das gleiche für API V2 Android tun kann, der Grund, warum ich das tun möchte, ist, dass jedes Informationsfenster jedes Markers einige Informationen dieses Markers wissen muss. Und ich versuche, dies unten in render Funktion zu erreichen:

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

versuchen hier http://stackoverflow.com/questions/14811579/android-map-api-v2-benutzerdefinierte-marker-mit-bildansicht – user2725663

Antwort

41

Sie können nicht direkt Marker verlängern, weil es eine letzte Klasse ist, aber Sie haben einige Optionen:

0) Ab Google Karten Android API v2 Version 9.4.0, können Sie und Marker::setTag verwenden. Dies ist wahrscheinlich die bevorzugte Option.

1) Karte erstellen alle zusätzliche Informationen zu speichern:

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

Wenn eine Markierung zu schaffen, fügen Sie es mit Ihren Daten zu dieser Karte:

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

Später in Ihrer render Funktion :

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

2) Eine andere Möglichkeit wäre, Marker.snippet zu verwenden, um alle Informationen als String zu speichern und später zu parsen, aber das ist eine hässliche und nicht zu wartende Lösung.

3) Wechseln Sie von der einfachen Google Maps Android API v2 zu Android Maps Extensions.

Dies ist sehr ähnlich Punkt 1, aber man kann MyData in Marker direkt speichern, mit

marker.setData(myDataObj); 

und später:

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

thx ~ Ich wählte die erste Methode am Ende und es funktioniert. Irgendeine Idee, warum v2 nicht erweitert werden kann? nur neugierig .. – Arch1tect

+0

@ Arch1tect Design Wahl basierend auf der Entscheidung, separaten Prozess zu tun, um echte Arbeit zu tun. Objekte, mit denen Sie interagieren, sind nichts weiter als Proxies. –

+0

@ MaciejGórski Pls. Überprüfen Sie meine Frage, wie kann ich PropertyID bei percular Pin klicken [http://stackoverflow.com/questions/20784094/get-custom-class-data-information-on-map-v2-popuplick-event-in-android] (http://stackoverflow.com/questions/20784094/get-custom-class-data-information-on-map-v2-popuplick-event-in-android) –

Verwandte Themen