2013-06-08 3 views
17

При использовании Google Map API V3 можно добавить пользовательское свойство следующим образом:Добавление пользовательского свойства к маркеру (API V2 Google Map Android)

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, 
    ... 

});

Мне интересно, могу ли я сделать то же самое для API V2 Android, причина, по которой я хочу это сделать, заключается в том, что каждое информационное окно каждого маркера должно знать некоторую информацию этого маркера. И я пытаюсь добиться этого в render функции ниже:

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

попробовать здесь http://stackoverflow.com/questions/14811579/android-map-api-v2-custom-marker-with-imageview – user2725663

ответ

41

Вы не можете непосредственно продлить Marker, потому что это конечный класс, но у вас есть несколько вариантов:

0) С помощью Google Карты Android API v2 версии 9.4.0, вы можете использовать Marker::getTag и Marker::setTag. Это, скорее всего, предпочтительный вариант.

1) Создайте карту для хранения всей дополнительной информации:

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

При создании маркеров, добавьте его в эту карту с вашими данными:

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

Позже в вашей render функции :

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

2) Другим способом было бы использовать Marker.snippet для хранения всей информации как String, а затем разобрать ее, но это своеобразное уродливое и неподъемное решение.

3) Переключить с простого API Android Google Maps v2 на Android Maps Extensions.

Это очень похоже на пункт 1, но вы можете непосредственно хранить MyData в маркер, используя

marker.setData(myDataObj); 

и позже:

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

thx ~ В конце я выбрал первый метод, и он работает. Любая идея, почему v2 не позволяет расширять? просто любопытно .. – Arch1tect

+0

@ Arch1tect Выбор дизайна на основе решения использовать отдельный процесс для выполнения реальной работы. Объекты, с которыми вы взаимодействуете, являются не чем иным, как прокси. –

+0

@ MaciejGórski Pls. проверьте мой вопрос, как я могу получить PropertyID при перкуляторе, нажмите [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) –

Смежные вопросы