我正在开发一款应该使用Google Maps v2的Android应用。 现在我一直在找到地图的缩放级别发生变化时。 任何人都可以帮助我吗?先谢谢。
答案 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)
由于之前的答案基于OnCameraChangeListener
且deprecated,因此此答案基于相机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
}
}
}