如何在有限的区域内拖放标记?

时间:2017-05-06 20:02:44

标签: java android google-maps gps

如何在有限的区域内拖放标记?例如,圆的半径为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) {
    }
});

1 个答案:

答案 0 :(得分: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