Ý tôi là nếu tôi nhấp vào điểm đánh dấu OnMarkerClickListener
sẽ được gọi, do đó, OnMapClickListener
thì không. Ngay cả khi tôi đặt đối tượng điểm đánh dấu mMap.setOnMarkerClickListener(null);
vẫn che dấu tất cả các sự kiện nhấp chuột cho bản đồ và đối tượng cơ bản. Làm cách nào để tôi có thể đặt Marker
minh bạch cho tất cả các vi phạm của người dùng?API Google Maps phiên bản 2: Cách tạo điểm đánh dấu không thể nhấp được?
Trả lời
Đây thực sự là "giới hạn" của điểm đánh dấu là phiên bản 3.1.59 của thư viện.
Nếu bạn thực sự cần chúng là điểm đánh dấu, vui lòng gửi yêu cầu tính năng trên gmaps-api-issues cho MarkerOptions.clickable
và Marker.setClickable
.
Nếu bạn có thể, hãy xem xét sử dụng các đối tượng trực quan khác, ví dụ: GroundOverlay
. Vấn đề duy nhất là tất cả chúng đều có tỷ lệ với bản đồ, không giống như các điểm đánh dấu. Điểm gần nhất sẽ là Circle
với bán kính bằng 0 và chiều rộng đột quỵ 20-50 dp, nhưng đó chỉ là một chấm màu duy nhất.
Theo số docs về điểm đánh dấu, nếu bạn thêm Trình nghe của riêng mình và phương thức onMarkerClick() trả về false, hành vi mặc định sẽ được thực hiện.
Vì vậy, trong onMarkerClick() vừa trả về true và không làm gì khác để ghi đè hoàn toàn mặc định.
Cách giải quyết duy nhất tôi tìm thấy cho vấn đề này là để thực hiện cùng một mã trong OnMarkerClickListener
mà bạn có trong OnMapClickListener
và trở false
:
getMap().setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
onMapClick(marker.getPosition());
return true;
}
});
Giải pháp này không hoạt động vì onMarkerClick cung cấp cho bạn vị trí của điểm đánh dấu mà nó xác định là gần nhất với nơi bạn nhấp vào, không phải nơi bạn thực sự nhấp vào. – Justin
tôi cố gắng 'onMarkerClick (Marker arg0) {return true;} 'nhưng 'onMapClick' vẫn chưa được gọi. Tôi nghĩ rằng lời giải thích của tài liệu có nghĩa là nếu tôi trả về 'true' thì không có hành vi mặc định nào xảy ra (infoWindow), chỉ mã của tôi, mà tôi đăng trong' onMarkerClick' –
Hãy thử điều này: trong onMarkerClick thêm dòng 'onMapClick (marker.getPosition()) ; ' –
Tôi đã nghĩ về nó. Trong trường hợp này sẽ là một lỗi lớn. Tôi sẽ làm theo cách này nếu không tìm thấy giải pháp nào khác –