我怎么想在谷歌地图里面的特定标记上使用OnLongClickListener

时间:2017-12-14 00:29:02

标签: android google-maps

首先,我创建了Arraylist,我放置了所有标记。

 markerArrayList = new ArrayList<Marker>();


    marker1 = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(51.1117744, 17.0353596))
            .title("Giselle French Bakery Cafe")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
    marker1.setDraggable(false);
    marker1.setTag(0);


    marker2 = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(51.110969, 17.031510))
            .title("Second Bakery Cafe")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
    marker2.setDraggable(false);
    marker2.setTag(1);

    markerArrayList.add(marker1);
    markerArrayList.add(marker2);

接下来我在地图上使用了LongClickListener,并尝试检查点击了哪一个:

mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick(LatLng latLng) {
            for (Marker marker : markerArrayList) {
                if (Math.abs(marker.getPosition().latitude - latLng.latitude) < 0.005
                        && Math.abs(marker.getPosition().longitude - latLng.longitude) < 0.005) {
                    onMarkerLongClick(marker);
                    break;
                }
            }
        }
    });

但问题是,无论我在地图上长时间点击使用,它总是从arraylit中选择第一行。

2 个答案:

答案 0 :(得分:0)

您的标记比onMapLongClick(...)中检查的差异更接近,这会留下一个非常小的差异窗口。尝试从0.005减少到0.00005或将第一个标记从第二个标记移开(尝试检查这些坐标:LatLng(51.15, 17.00))。

答案 1 :(得分:0)

在检查了一些解决方案之后,如果标记设置得非常接近,我找到了最佳答案。

以下是应该正常运行的代码片段

mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick(LatLng latLng) {
            for (Marker marker : markerArrayList) {
                if (Math.abs(marker.getPosition().latitude - latLng.latitude) < 0.001
                        && Math.abs(marker.getPosition().longitude - latLng.longitude) < 0.001) {
                    onMarkerLongClick(marker);
                    break;
                }
            }
        }
    });