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

标签 java android

我正在使用以下代码在 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/

相关文章:

java - 如何为 Jtable 中的行添加边框?

android - 如何在网站上弹出添加到主屏幕 在移动浏览器中打开

java - 使用 SSLSockets 的正确方法是什么?为什么会收到这些错误?

java - 如何使用jade向远程主机上的另一个代理发送消息?

java - 如何在Android中解析JSON数组(不是Json对象)

Java 8 : Merging two Lists containing objects by key

android - 发布应用后的 Logcat

php - 如何为我的应用程序的用户添加积分并将其连接到 Android?

android - 什么是 Android SDK 构建工具、平台工具和工具?

android - forge.file.getVideo - 在 Android 4.3 上崩溃