gpt4 book ai didi

java - 如何在用户 map 缩放时调整多个圆的大小?

转载 作者:行者123 更新时间:2023-11-30 04:55:31 24 4
gpt4 key购买 nike

我正在使用以下代码在 Google Maps API 上绘制许多圆圈:

Circle circle = map.addCircle(new CircleOptions()
.center(lastKnownLatLng)
.radius(4)
.strokeColor(Color.RED)
.fillColor(Color.RED));

并将它们存入List<Circle> circleList = new ArrayList<>()通过 circleList.add(circle) 将它们一一添加.我想让这些圆的半径在用户“放大”和“缩小”时自动调整大小(就像 Polyline Class 那样)。这是我的解决方案,但我不知道如何计算新半径。

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);
}
}

最佳答案

原始答案

找出未缩放时的默认半径。然后使用缩放级别作为初始半径的乘数。

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

private static final double INITIAL_RADIUS = 4.0;

不要依赖于之前的缩放级别,而是找到当前的缩放级别,这样您就可以确定合适的乘数。将缩放级别增加 1 时, View 的宽度会加倍,因此我们希望圆半径具有类似的行为。

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

缩放级别 0 也是可能的,因此这可能是需要处理的特殊情况。

可在此处找到有关缩放级别的更多信息:https://developers.google.com/maps/documentation/android-sdk/views#zoom

扩展答案

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

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

关于java - 如何在用户 map 缩放时调整多个圆的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59268285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com