在Android中的谷歌地图v2中的缩放级别监听器

时间:2012-12-20 14:04:17

标签: android google-maps google-maps-mobile google-maps-android-api-2

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

4 个答案:

答案 0 :(得分:49)

如果您正在寻找如何确定缩放级别是否已从之前的缩放级别更改,请按以下步骤进行操作:

定义实例变量以跟踪先前的缩放级别:

//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;

完成任何操作后,依赖于知道地图是否缩放。

答案 1 :(得分:37)

创建一个实现of OnCameraChangeListener,并传递它的实例to setOnCameraChangeListener() of your GoogleMap。每当用户更改缩放,居中或倾斜时,都应使用onCameraChange()调用您的侦听器。您可以从传递的CameraPosition对象中找到新的缩放级别。

答案 2 :(得分:28)

由于之前的答案基于OnCameraChangeListenerdeprecated,因此此答案基于相机setOnCameraMoveListener

在此示例中,当用户更改缩放(使用控件或手指和缩放)时,我正在更改Map Type。如果zoom level更改为高于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);
        }
    }
});

答案 3 :(得分:0)

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

googleMap.setOnCameraMoveStartedListener { reason ->
   when (reason) {
      GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
         //handle this state
      }
    }
}
相关问题