40 votes

Sur l'événement de zoom pour Google Maps sur Android

Nous construisons une application qui utilise l'API Google Maps pour Android.

J'ai mon MapController et MapView, et j'active les contrôles de zoom intégrés en utilisant :

mapView.setBuiltInZoomControls(true);

Je voudrais maintenant recevoir un événement lorsque l'utilisateur zoom réellement sur la carte, comment puis-je procéder ? Je ne trouve aucun événement de ce type ou aucun événement général où je pourrais détecter un changement de niveau de zoom.

Mise à jour

Le mapView.getZoomControls() est déprécié. Et la documentation suggère d'utiliser mapView.setBuiltInZoomControls(bool) à la place. C'est bien, mais je ne parviens tout simplement pas à comprendre comment agir sur les événements des contrôles de zoom intégrés.

40voto

tarmelop Points 576

Avec l'API Google Maps Android v2, vous pouvez utiliser un GoogleMap.OnCameraChangeListener comme ceci:

mMap.setOnCameraChangeListener(new OnCameraChangeListener() {

    private float currentZoom = -1;

    @Override
    public void onCameraChange(CameraPosition pos) {
        if (pos.zoom != currentZoom){
            currentZoom = pos.zoom;
            // faire votre action ici
        }
    }
});

25voto

Kurru Points 6746

Vous pouvez implémenter votre propre "sondage" de la valeur de zoom pour détecter quand le zoom a été modifié en utilisant le Handler android.

Utilisez le code suivant pour votre événement runnable. C'est ici que votre traitement doit être effectué.

private Handler handler = new Handler();

public static final int zoomCheckingDelay = 500; // en ms

private Runnable zoomChecker = new Runnable()
{
    public void run()
    {
        checkMapIcons();

        handler.removeCallbacks(zoomChecker); // supprimer l'ancien callback
        handler.postDelayed(zoomChecker, zoomCheckingDelay); // enregistrer un nouveau
    }
};

Démarrez un événement de rappel en utilisant

protected void onResume()
{
    super.onResume();
    handler.postDelayed(zoomChecker, zoomCheckingDelay);
}

et arrêtez le lorsque vous quittez l'activité en utilisant

protected void onPause()
{
    super.onPause();
    handler.removeCallbacks(zoomChecker); // arrêter la mise à jour de la carte
}

Cet article est basé sur peut être trouvé ici si vous voulez un exposé plus long.

7voto

Abhinav Points 10339

J'utilise cette bibliothèque qui a un auditeur de fonction onZoom. http://code.google.com/p/mapview-overlay-manager/. Fonctionne bien.

5voto

Billy Bob Bain Points 2069

Comme l'a dit l'OP, utilisez l'événement onUserInteractionEvent et faites le test vous-même.

4voto

JasonOfEarth Points 349

La API android suggère d'utiliser ZoomControls qui possède un setOnZoomInClickListener()

Pour ajouter ces contrôles de zoom, vous devez :

ZoomControls mZoom = (ZoomControls) mapView.getZoomControls();

Ensuite, ajoutez mZoom à votre mise en page.

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