我正在开发一个应该使用 Google Maps v2 的 Android 应用程序。现在我一直在寻找地图的缩放级别何时发生变化。任何人都可以帮助我吗?在此先感谢。
4 回答
如果您正在寻找如何确定缩放级别是否已从以前的缩放级别更改,我建议您这样做:
定义一个实例变量来跟踪之前的缩放级别:
//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;
在您完成任何依赖于知道地图是否正在缩放的操作之后。
由于以前的答案基于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);
}
}
});
创建 的实现,OnCameraChangeListener
并将其实例传递给setOnCameraChangeListener()
您的GoogleMap
. onCameraChange()
每当用户更改缩放、中心或倾斜时,都应该调用您的侦听器。CameraPosition
您从传递的对象中找出新的缩放级别。
您还可以GoogleMap.OnCameraMoveStartedListener
使用方法覆盖和注册它GogleMap.setOnCameraMoveStartedListener
:
googleMap.setOnCameraMoveStartedListener { reason ->
when (reason) {
GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
//handle this state
}
}
}