2013-06-08 16 views
17

Kiedy za pomocą Google Map API V3 mogę dodać właściwość niestandardową w następujący sposób:Dodawanie niestandardowych nieruchomość do markera (Google Map API Android 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, 
    ... 

});

Zastanawiam się, czy mogę zrobić to samo dla API V2 w systemie Android, dlatego chcę to zrobić, ponieważ każde okno informacyjne każdego znacznika musi znać pewne informacje o tym znaczniku. I staram się to osiągnąć w render funkcji poniżej:

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

spróbować tu http://stackoverflow.com/questions/14811579/android-map-api-v2-custom-marker-with-viewview – user2725663

Odpowiedz

41

Nie można bezpośrednio rozszerzyć Marker, ponieważ jest to ostateczna klasy, ale masz kilka opcji:

0) Jak Google Mapy Android API v2 w wersji 9.4.0, można używać Marker::getTag i Marker::setTag. Jest to najprawdopodobniej preferowana opcja.

1) Tworzenie mapy, aby przechowywać wszystkie informacje dodatkowe:

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

Tworząc znacznik, dodać go do tej mapy z danymi:

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

Później w funkcji render :

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

2) Innym sposobem byłoby użycie Marker.snippet do przechowywania wszystkich informacji jako String, a następnie przeanalizowanie go, ale jest to dość brzydkie i nie do naprawienia rozwiązanie.

3) Przejście z prostego interfejsu Google Maps Android API v2 na Android Maps Extensions.

ten jest bardzo podobny do punktu 1, ale można bezpośrednio zapisać MyData do markera, używając

marker.setData(myDataObj); 

i nowszych:

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

thx ~ Wybrałem pierwszą metodę na końcu i działa. Czy jest jakiś pomysł, dlaczego v2 nie pozwala na rozszerzenie? po prostu ciekawy .. – Arch1tect

+0

@ Arch1tect Wybór projektu w oparciu o decyzję o użyciu oddzielnego procesu do prawdziwej pracy. Obiekty, z którymi wchodzisz w interakcje, są niczym więcej niż proxy. –

+0

@ MaciejGórski Pls. sprawdź moje pytanie, w jaki sposób mogę uzyskać PropertyID przy kliknięciu pinezki kliknij [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) –

Powiązane problemy