2013-01-24 21 views
23

Hiện tại Bản đồ Android v2 sẽ chụp vào vị trí điểm đánh dấu sau khi nhấp chuột. Tôi muốn vô hiệu hóa hành vi này nhưng không thấy tùy chọn nào để thực hiện điều đó.Không chụp vào điểm đánh dấu sau khi nhấp chuột trong bản đồ android v2

Có ai biết cách khắc phục điều đó không?

+0

chụp? nó có nghĩa là gì? vui lòng giải thích chi tiết hơn .. – BBonDoo

+0

Tôi cũng đang tìm một giải pháp tương tự. giải thích của tôi về "snap" là để máy ảnh di chuyển đến vị trí điểm đánh dấu đó. Về cơ bản làm thế nào để ngăn chặn máy ảnh di chuyển khi người dùng đã nhấp vào một điểm đánh dấu? – DMCApps

Trả lời

50

Dựa trên những gì tôi đọc từ Markers - API của Google Maps dành cho Android (https://developers.google.com/maps/documentation/android/marker#marker_click_events)

Marker nhấp chuột sự kiện

Bạn có thể sử dụng một OnMarkerClickListener để nghe cho các sự kiện nhấp chuột vào điểm đánh dấu. Để đặt người nghe này trên bản đồ, hãy gọi GoogleMap.setOnMarkerClickListener (OnMarkerClickListener). Khi người dùng nhấp vào điểm đánh dấu, onMarkerClick (Marker) sẽ được gọi và điểm đánh dấu sẽ được chuyển qua làm đối số. Phương thức này trả về một boolean cho biết liệu bạn đã tiêu thụ sự kiện (tức là, bạn muốn chặn hành vi mặc định). Nếu nó trả về false, thì hành vi mặc định sẽ xảy ra ngoài hành vi tùy chỉnh của bạn. Hành vi mặc định cho sự kiện nhấp chuột đánh dấu là hiển thị cửa sổ thông tin (nếu có) và di chuyển máy ảnh sao cho điểm đánh dấu được căn giữa trên bản đồ.

Bạn có thể ghi đè phương thức này và chỉ để mở điểm đánh dấu và trả về true để tiêu thụ sự kiện.

// Since we are consuming the event this is necessary to 
// manage closing opened markers before opening new ones 
Marker lastOpened = null; 

mMap.setOnMarkerClickListener(new OnMarkerClickListener() { 
    public boolean onMarkerClick(Marker marker) { 
     // Check if there is an open info window 
     if (lastOpened != null) { 
      // Close the info window 
      lastOpened.hideInfoWindow(); 

      // Is the marker the same marker that was already open 
      if (lastOpened.equals(marker)) { 
       // Nullify the lastOpened object 
       lastOpened = null; 
       // Return so that the info window isn't opened again 
       return true; 
      } 
     } 

     // Open the info window for the marker 
     marker.showInfoWindow(); 
     // Re-assign the last opened such that we can close it later 
     lastOpened = marker; 

     // Event was handled by our code do not launch default behaviour. 
     return true; 
    } 
}); 

Đây là mã chưa được kiểm chứng nhưng đó có thể là giải pháp khả thi.

Cảm ơn, DMan

+0

Điều này hoạt động hoàn hảo, cảm ơn! –

+0

@ D-32 Không sao cả! – DMCApps

+0

Vâng! Cảm ơn! Trong trường hợp của tôi, tôi chỉ cần gọi onMapClick (marker.getPosition()) để nhấp vào điểm đánh dấu hoạt động như một cú nhấp chuột trên bản đồ ở vị trí của người đánh dấu. Sau đó, trả về true để thông báo rằng sự kiện đã được xử lý. –

1

Có vẻ chúng ta sẽ có thể làm như sau, nhưng do this bug, nó không hoạt động vì marker.isInfoWindowShown() luôn trả về false:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    public boolean onMarkerClick(Marker marker) { 
     if (marker.isInfoWindowShown()) { 
      marker.hideInfoWindow(); 
     } else { 
      marker.showInfoWindow(); 
     } 
     return true; 
    } 
}); 

Tuy nhiên, sau đây có tác dụng tương tự và không hoạt động:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 

    Marker currentShown; 

    public boolean onMarkerClick(Marker marker) { 
     if (marker.equals(currentShown)) { 
      marker.hideInfoWindow(); 
      currentShown = null; 
     } else { 
      marker.showInfoWindow(); 
      currentShown = marker; 
     } 
     return true; 
    } 
}); 

Vì chỉ có một cửa sổ thông tin được hiển thị tại một thời điểm (như được nêu trong Google Maps API v2 Developer Guide), chúng tôi chỉ phải bận tâm về việc ẩn cửa sổ thông tin nếu điểm đánh dấu có cửa sổ thông tin hiện đang mở được nhấp.