Googleマップv2を使用することになっているAndroidアプリを開発しています。今では、マップのズームレベルが変更されたことを見つけるのに困っています。
実装を作成します OnCameraChangeListener
のインスタンスを渡します GoogleMap
のsetOnCameraChangeListener()
に。ユーザーがズーム、センター、またはチルトを変更するたびに、リスナーはonCameraChange()
で呼び出される必要があります。渡されたCameraPosition
オブジェクトから新しいズームレベルを見つけます。
ズームレベルが前のズームレベルから変更されたかどうかを判断する方法を探している場合は、次のことをお勧めします。
インスタンス変数を定義して、前のズームレベルを追跡します。
//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
に基づいており、それは 非推奨 であるため、この回答はカメラ setOnCameraMoveListener
に基づいています。
この例では、ユーザーがズームを変更するときに(コントロールまたは指とズームを使用して) Map Type を変更しています。 ズームレベル が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);
}
}
});