有沒有辦法在google maps v2上設置標記上的longClickListsner
?我想讓用戶長按標記並用對話框顯示刪除或查看信息的選項。這可以做到嗎?在地圖上設置LongClickListener標記
回答
標記類沒有LongClickListener。雖然這種方法遠非完美,但這是一個關於你能做什麼的想法。
爲您的GoogleMap對象設置一個長按監聽器。長按一下,檢查點擊位置是否足夠接近任何標記。要確定這個接近度閾值,您可以使用地圖縮放級別。
這裏是不太好的示例代碼。我沒有嘗試過,但它可能適合您的需求。
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;
}
}
}
});
我有另外一個提議。
首先我做出標記可拖動:
mapa.addMarker(new MarkerOptions() ...
.setDraggable(true);
可以使聽者setOnMarkerDragListener這樣後:
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
}
});
然後你就可以越過你要(通常onMarkerDragStart模擬長點擊)
希望它有幫助
ARP雖然它的答案沒問題,但它卻有一個醜陋的效果:當你開始拖動時,標記向上移動,當你完成標記時,標記仍然處於比用手指指向更高的位置。
由於ARP建議,您可以使用OnMarkerDragListener模擬長按。就我而言,我創造新的標誌物onMapLongClick()時有發生,所以我想做類似(但不等於)的
@Override
public void onMarkerDragStart(Marker marker) {
marker.remove();
MarkerOptions options = createBasedOnMarker(marker);
this.googleMap.addMarker(options);
}
這樣一來,你就刪除了以前內的標誌的東西在相同的位置上創建另一個相同的內容(您必須有一個Map或Pair來保存您創建的標記的信息)。
希望我的解決方法有所幫助。
akaya's answer是個不錯的辦法,但如果你有com.google.maps.android:android-maps-utils:0.3+library included你的項目,你可以準確的對距離:
double distance = SphericalUtil.computeDistanceBetween(
marker.getPosition(),
latLng
);
if(distance < 50) { // closer than 50 meters?
//..do stuff..
}
這是壞方法,您還必須尊重地圖縮放級別 – 2017-02-13 08:04:27
縮放無關。 http://googlemaps.github.io/android-maps-utils/javadoc/com/google/maps/android/SphericalUtil.html#computeDistanceBetween-LatLng-LatLng- – flowtron 2017-03-01 15:17:00
萬一有人需要它,我已經調整了對數函數來計算@akaya提到的接近閾值時,工作正常的5.0和18之間。在此變焦的功能是:
float zoom = mMap.getCameraPosition().zoom;
double maxDistance = 2000000 * Math.exp(-0.644*zoom);
嘿看看這段代碼,我剛剛停止了拖動標記,並使用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);
}
}
你可以這樣稱呼聽衆!
map.setOnMarkerDragListener(new LinkMarkerLongClickListener(markers) {
@Override
public void onLongClickListener(Marker marker) {
ToastUtils.showToast(Mission1Activity.this, marker.getTitle());
}
});
- 1. 在地圖上點擊設置標記
- 2. 谷歌地圖上的設置標記
- 3. 在Google地圖v2上設置動畫標記
- 4. 如何在Google地圖上設置不同顏色的標記?
- 5. 設置標記在地圖上使用角度JS
- 6. 離子谷歌地圖,如何設置標記上的位置?
- 7. 設置谷歌地圖標記
- 8. 在地圖上標記並搜索標記位置
- 9. 標記在地圖上V3
- 10. 在地圖中放置位置標記?
- 11. 谷歌地圖上的設置標記不起作用
- 12. ListView上的LongClickListener
- 13. 如何在這裏使用Android SDK設置SVG圖標在HERE地圖上的地圖標記
- 14. 谷歌地圖在當前位置設置標記
- 15. 在谷歌地圖上的其他標記上顯示標記
- 16. 如何在Google地圖上標註地圖標記ios
- 17. 在Google地圖中放置標記
- 18. 如何在地圖上設置帶日曆的標題標題?
- 19. 如何在android中的谷歌地圖中心設置標記?
- 20. 在地圖中將照片設置爲標記
- 21. 在POI(谷歌地圖v2)下設置標記
- 22. 谷歌地圖設置標記圖標僅複製到默認圖標
- 23. 谷歌地圖v3 - 設置界標到標記中心
- 24. 在不同標記上設置onMarkerClickListener
- 25. 在地圖上連接標記
- 26. 在地圖上拖動標記
- 27. 在谷歌地圖上添加標記
- 28. 在地圖上添加標記Android
- 29. 在Route-me地圖上重繪標記
- 30. mysql標記不在地圖上顯示
這將是一個辦法,但它不是愚弄證明,因爲你可以選擇你不想一個標記,你不會知道,直到你刪除它 – tyczj 2013-03-13 18:50:39
@tyczj是的,這是不犯規的證據。儘管如此,即使標記具有聽衆,當它們太靠近時也會發生錯誤。伊莫,檢查最接近的標記不會帶來額外的問題。無論如何都會發生Misclicks,您只需要讓用戶確認操作即可。 – akaya 2013-03-14 08:05:59