web-dev-qa-db-ja.com

Googleマップv2のズームレベルリスナーandroid

Googleマップv2を使用することになっているAndroidアプリを開発しています。今では、マップのズームレベルが変更されたことを見つけるのに困っています。

38
Khikmat

実装を作成します OnCameraChangeListener のインスタンスを渡します GoogleMapsetOnCameraChangeListener()に。ユーザーがズーム、センター、またはチルトを変更するたびに、リスナーはonCameraChange()で呼び出される必要があります。渡されたCameraPositionオブジェクトから新しいズームレベルを見つけます。

37
CommonsWare

ズームレベルが前のズームレベルから変更されたかどうかを判断する方法を探している場合は、次のことをお勧めします。

インスタンス変数を定義して、前のズームレベルを追跡します。

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

マップがズームされているかどうかを知ることに依存しているアクションを完了した後。

49
DiscDev

以前の回答は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);
        }
    }
});