web-dev-qa-db-fra.com

écouteur de niveau de zoom dans google maps v2 en android

Je suis en train de développer une application Android qui est censée utiliser Google Maps v2. Maintenant, je ne peux pas savoir quand le niveau de zoom de la carte a changé. Quelqu'un peut-il m'aider? Merci d'avance.

38
Khikmat

Créez une implémentation de OnCameraChangeListener , et passez une instance de celle-ci à setOnCameraChangeListener() de votre GoogleMap . Votre auditeur doit être appelé avec onCameraChange() chaque fois que l'utilisateur modifie le zoom, le centre ou l'inclinaison. Vous découvrez le nouveau niveau de zoom à partir de l'objet CameraPosition que vous avez passé.

37
CommonsWare

Si vous cherchez à déterminer si le niveau de zoom a changé par rapport au niveau de zoom précédent, voici ce que je suggère:

Définissez une variable d'instance pour garder une trace du niveau de zoom précédent:

//Initialize to a non-valid zoom value
private float previousZoomLevel = -1.0f;

Définissez également une variable d'instance pour vous permettre de savoir si la carte effectue un zoom:

private boolean isZooming = false;

Lorsque vous configurez votre instance GoogleMap, attribuez-lui un OnCameraChangeListener ...

//mMap is an instance of GoogleMap
mMap.setOnCameraChangeListener(getCameraChangeListener());

Maintenant, définissez OnCameraChangeListener qui déterminera si le niveau de zoom a changé:

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

Maintenant, vous pouvez vérifier la valeur de isZooming pour savoir si vous modifiez les niveaux de zoom.

Assurez-vous de définir

isZooming = false;

une fois que vous avez terminé l'action, vous devez savoir si la carte effectue un zoom.

49
DiscDev

Comme les réponses précédentes sont basées sur OnCameraChangeListener et c'est-à-dire obsolète , cette réponse est basée sur la caméra setOnCameraMoveListener .

Dans cet exemple, je modifie mon Type de carte lorsque l'utilisateur modifie le zoom (à l'aide des commandes ou des doigts et du zoom). Si niveau de zoom passe au-dessus de 18,0, le type de carte passe à MAP_TYPE_HYBRIB et s'il descend en dessous de 18,0, le type de carte passe à 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);
        }
    }
});
29