2013-06-08 39 views
17

Khi sử dụng Google Map API V3 tôi có thể thêm thuộc tính tùy chỉnh theo cách sau:Thêm bất động sản tùy chỉnh để đánh dấu (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, 
    ... 

});

Tôi tự hỏi nếu tôi có thể làm tương tự cho API V2 Android, lý do tôi muốn làm điều này là mỗi cửa sổ thông tin của mỗi điểm đánh dấu cần phải biết một số thông tin của điểm đánh dấu đó. Và tôi đang cố gắng để đạt được điều này trong render chức năng dưới đây:

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

thử ở đây http://stackoverflow.com/question/14811579/android-map-api-v2-custom-marker-with-imageview – user2725663

Trả lời

41

Bạn có thể không trực tiếp mở rộng Marker, bởi vì nó là một lớp cuối cùng, nhưng bạn có một số lựa chọn:

0) Tính đến Google Maps Android API phiên bản v2 9.4.0, bạn có thể sử dụng Marker::getTagMarker::setTag. Điều này rất có thể là tùy chọn ưa thích.

1) Tạo một bản đồ để lưu trữ tất cả các thông tin bổ sung:

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

Khi tạo một điểm đánh dấu, thêm nó vào bản đồ này với dữ liệu của bạn:

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

Sau đó trong chức năng render của bạn :

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

2) Một cách khác là sử dụng Marker.snippet để lưu trữ tất cả thông tin dưới dạng String và sau đó phân tích cú pháp đó, nhưng đó là giải pháp xấu xí và không thể duy trì được.

3) Chuyển từ đồng bộ Google Maps API Android v2 sang Android Maps Extensions.

này rất giống với chỉ 1, nhưng bạn có thể trực tiếp lưu trữ MyData vào điểm đánh dấu, sử dụng

marker.setData(myDataObj); 

và sau:

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

thx ~ Tôi đã chọn phương thức đầu tiên ở cuối và nó hoạt động. Bất kỳ ý tưởng tại sao v2 không cho phép mở rộng? chỉ tò mò .. – Arch1tect

+0

@ Arch1tect Thiết kế lựa chọn dựa trên quyết định sử dụng quy trình riêng biệt để thực hiện công việc thực tế. Các đối tượng bạn tương tác không có gì khác ngoài proxy. –

+0

@ MaciejGórski Pls. kiểm tra câu hỏi của tôi làm thế nào tôi có thể nhận được PropertyID tại pin cơ bắp bấm vào [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) –

Các vấn đề liên quan