【问题标题】:How can I drag and drop a marker in a limited area?如何在有限区域内拖放标记?
【发布时间】:2017-05-06 20:02:43
【问题描述】:

如何在有限区域内拖放标记?例如,一个圆的半径为 20 米。用户只能在圆圈内拖放。这是我尝试过的代码。

map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
    @Override
    public void onMapClick(LatLng latLng) {
        mymarker.setPosition(latLng);
        mGoogleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
    }
});

map.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
    @Override
    public void onMarkerDragStart(Marker arg0) {
    }

    @SuppressWarnings("unchecked")
    @Override
    public void onMarkerDragEnd(Marker arg0) {
        Log.d("System out", "onMarkerDragEnd...");
        map.animateCamera(CameraUpdateFactory.newLatLng(arg0.getPosition()));
    }

    @Override
    public void onMarkerDrag(Marker arg0) {
    }
});

【问题讨论】:

    标签: java android google-maps gps


    【解决方案1】:

    当拖动开始时,您可以将地图移动到您想要限制拖动的范围内。并禁用地图手势以防止地图移动。如果您有缩放或我的位置控件,也可以在此处禁用它们。拖动结束后,您可以重新启用它们。

    map.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
        @Override
        public void onMarkerDragStart(Marker marker) {
            map.animateCamera(CameraUpdateFactory.newLatLngZoom(marker.getPosition(), 15));
            map.getUiSettings().setAllGesturesEnabled(false);
        }
    
        @Override
        public void onMarkerDrag(Marker marker) {}
    
        @Override
        public void onMarkerDragEnd(Marker marker) {
            map.getUiSettings().setAllGesturesEnabled(true);
        }
    });
    

    要通过中心和半径获取LatLngBounds,您可以使用this answer

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2015-10-01
    • 2011-08-21
    • 2022-09-24
    • 2020-03-04
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多