[英]How to resize many Circles on user map zoom?
我使用以下代码在 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)
将它们一一添加。 我想让这些圆的半径在用户“放大”和“缩小”时自动调整大小(就像折线类那样)。 这是我的解决方案,但我不知道如何计算新半径。
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 时,它会使视图的宽度加倍,因此我们希望圆半径具有类似的行为。
// 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.