【发布时间】:2012-12-20 14:04:17
【问题描述】:
我正在开发一个应该使用 Google Maps v2 的 Android 应用。 现在我一直在寻找地图的缩放级别何时发生变化。 任何人都可以帮助我吗?在此先感谢。
【问题讨论】:
标签: android google-maps google-maps-mobile google-maps-android-api-2
我正在开发一个应该使用 Google Maps v2 的 Android 应用。 现在我一直在寻找地图的缩放级别何时发生变化。 任何人都可以帮助我吗?在此先感谢。
【问题讨论】:
标签: android google-maps google-maps-mobile google-maps-android-api-2
如果您正在寻找如何确定缩放级别是否与之前的缩放级别相比发生了变化,以下是我的建议:
定义一个实例变量来跟踪之前的缩放级别:
//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,即deprecated,因此此答案基于摄像头OnCameraMoveListener。
在此示例中,当用户更改缩放(使用控件或手指和缩放)时,我将更改我的 Map Type。
如果zoom level 更改为以上 18.0,则地图类型更改为MAP_TYPE_HYBRIB 和
如果zoom level 更改为下面 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);
}
}
});
【讨论】:
创建一个实现of OnCameraChangeListener,并传递它的一个实例to setOnCameraChangeListener() of your GoogleMap。每当用户更改缩放、中心或倾斜时,都应该使用 onCameraChange() 调用您的侦听器。您从传递的CameraPosition 对象中找出新的缩放级别。
【讨论】:
您还可以覆盖GoogleMap.OnCameraMoveStartedListener 并使用GogleMap.setOnCameraMoveStartedListener 方法注册它:
googleMap.setOnCameraMoveStartedListener { reason ->
when (reason) {
GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
//handle this state
}
}
}
【讨论】: