web-dev-qa-db-fra.com

OnCameraChangeListener () est obsolète

Aujourd'hui, en regardant mon ancien code, j'ai découvert que OnCameraChangeListener () est désormais obsolète.

J'ai du mal à comprendre comment réparer ce morceau de code:

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;
    }
});

La nouvelle méthode d'écoute (alias OnCameraMoveListener ()) onCameraMove () n'a pas de variable d'entrée CameraPosition cameraPosition, je suis donc assez perdu: existe-t-il un moyen de recycler mon ancien code?

Voici sont quelques références.

29
Davide3i

Dans le nouveau modèle pour camera change events , il est correct que la variable CameraPosition ne soit pas transmise à l'écouteur.

Au lieu de cela, vous devriez simplement utiliser getCameraPosition () chaque fois que vous en avez spécifiquement besoin (c'est-à-dire lorsque le déplacement commence, est déplacé au milieu, annulé ou terminé/est retourné au repos).

28
ianhanniballake

Dans play-services-maps 9.4.0 version de l'API , Ils ont remplacé GoogleMap.OnCameraChangeListener() par trois écouteurs de caméra:

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

En fonction de votre code, je pense que vous devez utiliser GoogleMap.OnCameraIdleListener et GoogleMap.OnCameraMoveStartedListener comme ceci:

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();
                }

            }
        });
51
Barrak90

Il est conseillé d’utiliser les quatre nouveaux écouteurs de caméra (OnCameraIdleListener, OnCameraMoveListener, OnCameraMoveStartedListener, OnCameraMoveCanceledListener), mais si vous voulez toujours utiliser setOnCameraChangeListener, utilisez une version spécifique de Android-maps-utils

compiler 'com.google.maps.Android:android-maps-utils:0.4.3'

dans votre fichier de niveau de module.

4
Pravin Divraniya

Je suis en train de mettre à jour la réponse de @ Barrak90 dans Kotlin . Comme OnCameraChangeListener () est obsolète maintenant, vous pouvez utiliser

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 {

        }

Ici mMap est un objet GoogleMap et je l’appelle à l’intérieur 

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

utilisez mGoogleMap.setOnCameraIdleListener au lieu de mGoogleMap.setOnCameraChangeListener .

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;


           }
        });
0
santhosh rb