web-dev-qa-db-ja.com

OnCameraChangeListener()は非推奨です

今日、古いコードを振り返ると、OnCameraChangeListener()が非推奨になっていることがわかりました。

私のこのコードを修正する方法を理解するのは難しいと感じています:

mGoogleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition cameraPosition) {
        // Cleaning all the markers.
        if (mGoogleMap != null) {
            mGoogleMap.clear();
        }

        mPosition = cameraPosition.target;
        mZoom = cameraPosition.zoom;

        if (mTimerIsRunning) {
            mDragTimer.cancel();
        }

        mDragTimer.start();
        mTimerIsRunning = true;
    }
});

新しいリスナー(別名OnCameraMoveListener())メソッドonCameraMove()は'CameraPosition cameraPosition入力変数がないので、かなり迷ってしまいました。古いコードをリサイクルする方法はありますか?

ここ はいくつかの参照です。

33
Davide3i

play-services-maps 9.4.0バージョンのAPI では、GoogleMap.OnCameraChangeListener()を3つのカメラリスナーに置き換えました:

  • GoogleMap.OnCameraMoveStartedListener
  • GoogleMap.OnCameraMoveListener
  • GoogleMap.OnCameraIdleListener

コードに基づいて、次のようにGoogleMap.OnCameraIdleListenerGoogleMap.OnCameraMoveStartedListenerを使用する必要があると思います。

mGoogleMap.setOnCameraMoveStartedListener(new GoogleMap.OnCameraMoveStartedListener() {
            @Override
            public void onCameraMoveStarted(int i) {
                mDragTimer.start();
                mTimerIsRunning = true;
            }
        });

        mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
            @Override
            public void onCameraIdle() {
                // Cleaning all the markers.
                if (mGoogleMap != null) {
                    mGoogleMap.clear();
                }

                mPosition = mGoogleMap.getCameraPosition().target;
                mZoom = mGoogleMap.getCameraPosition().zoom;

                if (mTimerIsRunning) {
                    mDragTimer.cancel();
                }

            }
        });
57
Barrak90

カメラ変更イベント の新しいモデルでは、CameraPositionがリスナーに渡されないことが正しいです。

代わりに、特に必要なとき(つまり、移動が開始、移動中、キャンセル、または終了/アイドル状態に戻ったとき)に getCameraPosition() を使用する必要があります。

30
ianhanniballake

Kotlinで@ Barrak90の回答を更新しています。 OnCameraChangeListener()は非推奨になったため、次を使用できます。

mMap.setOnCameraMoveStartedListener { reason: Int ->
            when (reason) {
                GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
                    Log.d("camera", "The user gestured on the map.")
                }
                GoogleMap.OnCameraMoveStartedListener
                        .REASON_API_ANIMATION -> {
                    Log.d("camera", "The user tapped something on the map.")
                }
                GoogleMap.OnCameraMoveStartedListener
                        .REASON_DEVELOPER_ANIMATION -> {
                    Log.d("camera", "The app moved the camera.")
                }
            }
        }

mMap.setOnCameraIdleListener {
    val midLatLng: LatLng = mMap.cameraPosition.target//map's center position latitude & longitude
        }

mMap.setOnCameraMoveStartedListener {

        }

ここでmMapGoogleMapオブジェクトで、内部で呼び出しています

override fun onMapReady(map: GoogleMap?) {
        mMap = map as GoogleMap
        //your stuff
    }
6

新しく導入された4つのカメラリスナー(OnCameraIdleListenerOnCameraMoveListenerOnCameraMoveStartedListenerOnCameraMoveCanceledListener)を使用することをお勧めしますが、setOnCameraChangeListener特定のバージョンのAndroid-maps-utilsを使用します(以下で指定)

'com.google.maps.Android:android-maps-utils:0.4.3'をコンパイルします

モジュールレベルのgradleファイル。

5

mGoogleMap.setOnCameraChangeListenerの代わりにmGoogleMap.setOnCameraIdleListenerを使用します。

mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
            @Override
            public void onCameraIdle() {
                 mPosition = mGoogleMap.getCameraPosition().target;
                 mZoom = mGoogleMap.getCameraPosition().zoom;

                double lat =  mGoogleMap.getCameraPosition().target.latitude;
                double lng =  mGoogleMap.getCameraPosition().target.longitude;


           }
        });
2
santhosh rb