Java 如何在用户地图缩放时调整多个圆的大小?

Java 如何在用户地图缩放时调整多个圆的大小?,java,android,Java,Android,我用以下代码在Google Maps API上画了许多圆圈: Circle circle = map.addCircle(new CircleOptions() .center(lastKnownLatLng) .radius(4) .strokeColor(Color.RED)

我用以下代码在Google Maps API上画了许多圆圈:

Circle circle = map.addCircle(new CircleOptions()
                                    .center(lastKnownLatLng)
                                    .radius(4)
                                    .strokeColor(Color.RED)
                                    .fillColor(Color.RED));
并通过使用
circleList.add(circle)
逐个添加它们,将它们存储到
List circleList=new ArrayList()
中。 我想让这些圆的半径在用户放大和缩小时自动调整大小(就像多段线类一样)。这是我的解决方案,但我不知道如何计算新半径

public GoogleMap.OnCameraChangeListener getCameraChangeListener() {
        return new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition position) {
                Log.d("Zoom", "Zoom: " + position.zoom);
                zoomLevel = position.zoom;
                if(!circleList.isEmpty()){
                    resizeCircles();
                }
            }
        };
    }

    public void resizeCircles() {
        if (???) { // if zoom in, it mean zoomLevel increase and I need to decrease radius
            double newRadius = ???

            for (int i = 0; i < circleList.size(); i++)
                circleList.get(i).setRadius(newRadius);
        }

        if (???) { // if zoom out, it mean zoomLevel decrease and I need to increase radius
            double newRadius = ???

            for (int i = 0; i < circleList.size(); i++)
                circleList.get(i).setRadius(newRadius);
        }
    }
public GoogleMap.OnCameraChangeListener getCameraChangeListener(){
返回新的Google地图{
@凌驾
摄影机更改上的公共空白(摄影机位置){
Log.d(“缩放”,“缩放:”+位置缩放);
zoomLevel=position.zoom;
如果(!circleList.isEmpty()){
调整圆的大小();
}
}
};
}
public void resizeCircles(){
如果(???){//如果放大,这意味着缩放级别增加,我需要减小半径
双新半径=???
对于(int i=0;i
原始答案 计算未缩放时的默认半径。然后使用缩放级别作为初始半径的倍增

您可能还希望将圆的初始半径更改为常量,以便在其他地方使用。根据应用程序的需要调整此值

private static final double INITIAL_RADIUS = 4.0;
找到当前的缩放级别,然后确定适当的倍增,而不是取决于以前的缩放级别。将“缩放级别”增加1时,视图的宽度将增加一倍,因此我们希望圆半径具有类似的行为

// Something like this, perhaps.
double newRadius = INITIAL_RADIUS * Math.pow(2.0, currentZoomLevel);
缩放级别0也是一种可能性,因此这可能是需要处理的特殊情况

有关缩放级别的更多信息,请参见:

扩展答案 放大时减小圆的大小正好相反。可能需要调整初始半径。同样,请注意0缩放级别的可能性

// Something like this, perhaps.
double newRadius = INITIAL_RADIUS / Math.pow(2.0, currentZoomLevel);

问题是,根据缩放,圆也可能减少!如果放大或缩小,圆半径将在靠近时扩大,而在更远时收缩。这不是你想要的行为吗?这就是我从原来的问题中所假设的。放大(靠近一个点)->缩小圆以更好地拟合它。缩小->增加圆以使其更具可视性我编辑了我的伪代码以使其更易于理解你能计算新半径吗?