44

我正在开发一个应该使用 Google Maps v2 的 Android 应用程序。现在我一直在寻找地图的缩放级别何时发生变化。任何人都可以帮助我吗?在此先感谢。

4

4 回答 4

51

如果您正在寻找如何确定缩放级别是否已从以前的缩放级别更改,我建议您这样做:

定义一个实例变量来跟踪之前的缩放级别:

//Initialize to a non-valid zoom value
private float previousZoomLevel = -1.0f;

另外,定义一个实例变量让您知道地图是否正在缩放:

private boolean isZooming = false;

当你设置你的 GoogleMap 实例时,给它一个 OnCameraChangeListener...

//mMap is an instance of GoogleMap
mMap.setOnCameraChangeListener(getCameraChangeListener());

现在,定义将确定缩放级别是否已更改的 OnCameraChangeListener:

public OnCameraChangeListener getCameraChangeListener()
{
    return new OnCameraChangeListener() 
    {
        @Override
        public void onCameraChange(CameraPosition position) 
        {
            Log.d("Zoom", "Zoom: " + position.zoom);

            if(previousZoomLevel != position.zoom)
            {
                isZooming = true;
            }

            previousZoomLevel = position.zoom;
        }
    };
}

现在,您可以检查 isZooming 的值以了解您是否正在更改缩放级别。

确保设置

isZooming = false;

在您完成任何依赖于知道地图是否正在缩放的​​操作之后。

于 2012-12-20T16:07:41.350 回答
39

由于以前的答案基于OnCameraChangeListener并且已弃用,因此此答案基于 camera OnCameraMoveListener

在此示例中,当用户更改缩放(使用控件或手指和缩放)时,我正在更改我的地图类型。

如果缩放级别更改为上方 18.0,地图类型更改为MAP_TYPE_HYBRIB
如果缩放级别更改为下方 18.0,地图类型更改为MAP_TYPE_NORMAL

googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
    @Override
    public void onCameraMove() {
        CameraPosition cameraPosition = googleMap.getCameraPosition();
        if(cameraPosition.zoom > 18.0) {
            googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        } else {
            googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        }
    }
});
于 2016-11-12T18:35:20.317 回答
37

创建 的实现OnCameraChangeListener并将其实例传递setOnCameraChangeListener()您的GoogleMap. onCameraChange()每当用户更改缩放、中心或倾斜时,都应该调用您的侦听器。CameraPosition您从传递的对象中找出新的缩放级别。

于 2012-12-20T14:10:35.510 回答
0

您还可以GoogleMap.OnCameraMoveStartedListener使用方法覆盖和注册它GogleMap.setOnCameraMoveStartedListener

googleMap.setOnCameraMoveStartedListener { reason ->
   when (reason) {
      GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
         //handle this state
      }
    }
}
于 2021-07-07T10:27:11.780 回答