có cách nào để đặt longClickListsner
trên điểm đánh dấu trên google maps v2 không? Tôi muốn người dùng nhấn lâu vào điểm đánh dấu và có một hộp thoại với các tùy chọn để xóa hoặc xem thông tin. Điều này có thể được thực hiện?Đặt LongClickListener trên bản đồ Điểm đánh dấu
Trả lời
Lớp đánh dấu không có LongClickListener. Mặc dù cách tiếp cận này là xa hoàn hảo ở đây là một ý tưởng về những gì bạn có thể làm.
Đặt trình nghe nhấp chuột dài cho đối tượng GoogleMap của bạn. Khi nhấp chuột dài, hãy kiểm tra xem vị trí được nhấp có đủ gần với bất kỳ điểm đánh dấu nào của bạn hay không. Để quyết định ngưỡng gần gũi này, bạn có thể sử dụng mức thu phóng bản đồ.
Đây là mã mẫu không tốt. Tôi đã không thử nó nhưng nó có thể phù hợp với nhu cầu của bạn.
map.setOnMapLongClickListener(new OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
for(Marker marker : yourMarkerList) {
if(Math.abs(marker.getPosition().latitude - latLng.latitude) < 0.05 && Math.abs(marker.getPosition().longitude - latLng.longitude) < 0.05) {
Toast.makeText(MapActivity.this, "got clicked", Toast.LENGTH_SHORT).show(); //do some stuff
break;
}
}
}
});
Tôi có một đề xuất khác.
Đầu tiên tôi làm điểm đánh dấu kéo:
mapa.addMarker(new MarkerOptions() ...
.setDraggable(true);
Sau khi bạn có thể làm cho một setOnMarkerDragListener người nghe như thế này:
mapa.setOnMarkerDragListener(new OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
// TODO Auto-generated method stub
//Here your code
}
@Override
public void onMarkerDragEnd(Marker marker) {
// TODO Auto-generated method stub
}
@Override
public void onMarkerDrag(Marker marker) {
// TODO Auto-generated method stub
}
});
Và sau đó bạn có thể ghi đè mà bạn muốn (thường onMarkerDragStart để mô phỏng một lâu nhấp vào)
Hy vọng điều này sẽ giúp
Tuyệt vời! :))) – whiteLT
Tôi đã thử điều này nhưng vị trí thay đổi điểm đánh dấu của tôi chỉ khi nhấn. Tôi đã không bắt đầu kéo nó chỉ cần gõ vào nó và nó đã thay đổi. Tôi không muốn làm điều này. Bạn có thể gợi ý cho tôi bất kỳ cách nào khác không. –
Tôi nghĩ là vì điểm đánh dấu được căn giữa tại điểm bạn chạm vào. Tôi không biết nếu có một giải pháp cho điều đó, xin lỗi. – ARP
ARP s trả lời là tốt, nhưng nó bị một hiệu ứng xấu xí: các điểm đánh dấu thay đổi khi bạn bắt đầu kéo và khi bạn hoàn thành các điểm đánh dấu vẫn còn ở một vị trí cao hơn bạn đang chỉ với ngón tay của bạn.
Có một cái nhìn để http://www.youtube.com/watch?v=RxAHHJD4nU8
Như ARP gợi ý, bạn có thể sử dụng OnMarkerDragListener để mô phỏng bấm dài. Trong trường hợp của tôi, tôi đang tạo ra cột mốc mới khi onMapLongClick() xảy ra, vì vậy tôi muốn làm một cái gì đó tương tự (nhưng không bằng nhau) mà
@Override
public void onMarkerDragStart(Marker marker) {
marker.remove();
MarkerOptions options = createBasedOnMarker(marker);
this.googleMap.addMarker(options);
}
cách này, bạn sẽ loại bỏ các điểm đánh dấu mà trước đây trong bản đồ và tạo một vị trí khác ở cùng vị trí, với cùng một nội dung (bạn phải có Bản đồ hoặc Ghép nối để giữ thông tin từ các điểm đánh dấu bạn tạo).
Hy vọng giải pháp của tôi sẽ hữu ích.
akaya's answer không phải là một cách tiếp cận xấu, nhưng nếu bạn có com.google.maps.android:android-maps-utils:0.3+library included với dự án của bạn, bạn có thể chính xác về khoảng cách:
double distance = SphericalUtil.computeDistanceBetween(
marker.getPosition(),
latLng
);
if(distance < 50) { // closer than 50 meters?
//..do stuff..
}
Đó là cách tiếp cận xấu, bạn cũng phải tôn trọng mức thu phóng bản đồ –
Phóng to độc lập. http://googlemaps.github.io/android-maps-utils/javadoc/com/google/maps/android/SphericalUtil.html#computeDistanceBetween-LatLng-LatLng- – flowtron
Chỉ trong trường hợp ai đó có thể cần nó, tôi đã điều chỉnh một hàm logarit để tính toán ngưỡng gần gũi @akaya đã đề cập, trong đó hoạt động tốt với kiểu thu phóng giữa 5.0 và 18. đây là chức năng:
float zoom = mMap.getCameraPosition().zoom;
double maxDistance = 2000000 * Math.exp(-0.644*zoom);
Hey Hãy nhìn vào đoạn mã này Tôi vừa dừng điểm đánh dấu khỏi bị kéo và sử dụng phát hiện nhấp chuột dài của onMarkerDragStart
.
public abstract class LinkMarkerLongClickListener implements GoogleMap.OnMarkerDragListener {
private int previousIndex = -1;
private Marker cachedMarker = null;
private LatLng cachedDefaultPostion = null;
private List<Marker> markerList;
private List<LatLng> defaultPostions;
public LinkMarkerLongClickListener(List<Marker> markerList){
this.markerList = new ArrayList<>(markerList);
defaultPostions = new ArrayList<>(markerList.size());
for (Marker marker : markerList) {
defaultPostions.add(marker.getPosition());
marker.setDraggable(true);
}
}
public abstract void onLongClickListener(Marker marker);
@Override
public void onMarkerDragStart(Marker marker) {
onLongClickListener(marker);
setDefaultPostion(markerList.indexOf(marker));
}
@Override
public void onMarkerDrag(Marker marker) {
setDefaultPostion(markerList.indexOf(marker));
}
@Override
public void onMarkerDragEnd(Marker marker) {
setDefaultPostion(markerList.indexOf(marker));
}
private void setDefaultPostion(int markerIndex) {
if(previousIndex == -1 || previousIndex != markerIndex){
cachedMarker = markerList.get(markerIndex);
cachedDefaultPostion = defaultPostions.get(markerIndex);
previousIndex = markerIndex;
}
cachedMarker.setPosition(cachedDefaultPostion);
}
}
Bạn có thể gọi người nghe như thế này!
map.setOnMarkerDragListener(new LinkMarkerLongClickListener(markers) {
@Override
public void onLongClickListener(Marker marker) {
ToastUtils.showToast(Mission1Activity.this, marker.getTitle());
}
});
- 1. Nhiều Điểm đánh dấu trên Bản đồ Google
- 2. Google Maps v3 đặt điểm đánh dấu đơn trên bản đồ, hãy nhấp vào
- 3. Căn giữa điểm đánh dấu bản đồ trong Android
- 4. Xóa điểm đánh dấu khỏi bản đồ google iOS
- 5. Thêm ID vào các điểm đánh dấu bản đồ google
- 6. Điểm đánh dấu API bản đồ Google v3 chồng chéo
- 7. Thêm EGDE tròn đến một điểm đánh dấu bản đồ
- 8. Lập trình nhấp vào điểm đánh dấu và bản đồ
- 9. kích hoạt điểm đánh dấu bản đồ google nhấp
- 10. Bóng không hiển thị điểm đánh dấu bản đồ google
- 11. Đang tải các điểm đánh dấu trên bản đồ google động trên bản đồ di chuyển/kéo/pan
- 12. Android: Cách đặt imageView làm điểm đánh dấu trong android API bản đồ google?
- 13. 100k điểm đánh dấu trở lên trên bản đồ google mà không cần nhóm
- 14. Cách kiểm soát độ mờ đục của điểm đánh dấu trên bản đồ google
- 15. căn giữa bản đồ google dựa trên các giá trị dài của điểm đánh dấu lat
- 16. Cách thay đổi vị trí của Điểm đánh dấu trên Bản đồ Android v2
- 17. Vẽ một điểm đánh dấu như bản đồ google với TCanvas trên Delphi
- 18. Cách sử dụng google maps API với nhiều điểm đánh dấu trên cùng một bản đồ
- 19. Hiển thị cửa sổ bật lên phía trên điểm đánh dấu bản đồ trong MapView
- 20. Thêm điểm đánh dấu trên vị trí được chạm bằng bản đồ google trong android
- 21. Phát hiện nếu người dùng "bỏ chọn" điểm đánh dấu trên bản đồ google
- 22. Cách thêm chú giải công cụ tùy chỉnh cho điểm đánh dấu trên bản đồ google?
- 23. Leaflet.js căn giữa bản đồ trên một nhóm các điểm đánh dấu
- 24. Cách tự động cập nhật điểm đánh dấu trên bản đồ tờ rơi, với thiên thạch
- 25. Đặt điểm đánh dấu trên tất cả các điểm đánh dấu khác trong Google Maps SDK iOS
- 26. Đánh dấu Vị trí Hiện tại trên Bản đồ, Android
- 27. Thêm nhãn đánh số vào điểm đánh dấu bản đồ google
- 28. Google Maps: Hiển thị điểm đánh dấu phía trên markerclusterer
- 29. Điểm đánh dấu hoạt ảnh trên Google Maps v2
- 30. Hiển thị điểm đánh dấu tại một vị trí địa lý: -url trong Bản đồ Android
Đó sẽ là một cách nhưng không đánh lừa bằng chứng bởi vì bạn có thể chọn một dấu hiệu bạn không muốn và bạn sẽ không biết cho đến khi bạn xóa nó – tyczj
@tyczj Vâng, nó không phải là bằng chứng hôi. Tuy nhiên, ngay cả khi người đánh dấu có một người nghe, thì những sự sai lầm sẽ xảy ra khi họ quá gần. Imo, việc kiểm tra điểm đánh dấu gần nhất không mang lại thêm sự cố nào. Misclicks xảy ra anyway, bạn chỉ cần làm cho người dùng xác nhận hoạt động. – akaya