45 votes

OnCameraChangeListener () est obsolète

Aujourd'hui, en regardant en arrière à mon ancien code, j'ai trouvé que OnCameraChangeListener() est maintenant obsolète.

Je suis la recherche difficile de comprendre comment résoudre ce morceau de code de la mine:

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

Le nouveau port d'écoute (aka OnCameraMoveListener()) méthode onCameraMove() n'a pas un CameraPosition cameraPosition variable d'entrée, donc je suis assez perdu: est-il un moyen pour recycler mon ancien code?

Ici sont quelques-uns des références.

74voto

Barrak90 Points 501

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

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

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

            }
        });
 

32voto

ianhanniballake Points 18370

Dans le nouveau modèle de caméra événements de changement, il est exact que l' CameraPosition n'est pas passé dans l'écouteur.

Au lieu de cela, vous devriez utiliser getCameraPosition() à chaque fois que vous avez spécifiquement besoin (c'est à dire, lorsque le déplacement commence, mi-déplacer, annulée ou terminée/retour au ralenti).

10voto

KishanSolanki124 Points 966

Je suis en train de mettre à jour la réponse de @ Barrak90 dans Kotlin. Comme OnCameraChangeListener () est désormais obsolète, 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 GoogleMap objet et je l'appelle à l'intérieur

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

5voto

Pravin Divraniya Points 2748

Il est conseillé d'utiliser les quatre nouveaux écouteurs de caméra ( OnCameraIdleListener , OnCameraMoveListener , OnCameraMoveStartedListener , OnCameraMoveCanceledListener ), mais si vous le souhaitez aller avec setOnCameraChangeListener utiliser une version spécifique de android-maps-utils (donnée ci-dessous)

compilez 'com.google.maps.android:android-maps-utils:0.4.3'

dans votre fichier de niveau de module.

2voto

santhosh rb Points 4

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;


           }
        });
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X