Sur le zoom de l'événement de google maps sur android
Nous allons construire une application qui utilise l'api google maps pour android.
J'ai mon MapController et MapView, et j'ai activer le haut-commandes de zoom à l'aide de:
mapView.setBuiltInZoomControls(true);
Maintenant, j'aimerais obtenir un événement lorsque l'utilisateur fait des zooms sur la carte, comment dois-je faire à ce sujet? Je ne trouve pas de tel événement ou de tout événement général où j'ai pu détecter un changement dans le niveau de zoom.
Mise à jour
La mapView.getZoomControls() est obsolète. Et de la documentation suggère d'utiliser mapView.setBuiltInZoomControls(bool) à la place. C'est bien, mais que je ne peut tout simplement pas comprendre comment agir sur les événements à partir de l'intégré dans les contrôles de zoom.
- J'ai essayé la mise en œuvre de la onUserInteraction cas, pour le même but, mais j'ai encore un problème. Je suis de l'affichage d'une image qui doit être mis à l'échelle selon le niveau de zoom, donc évidemment, je tiens à appeler son redraw() méthode lorsque un utilisateur zoome. Mon problème est que onUserInteraction est appelée lorsque l'utilisateur clique sur le bouton de zoom, de sorte que le zoomLevel n'est pas encore été mis à jour et uniquement sur l'interaction suivante (cliquez sur, durée, peu importe) la zoomLevel est mis à jour. Donc, mon image est mise à jour uniquement après une interaction après que le zoom. Des idées?
- Cette question et la réponse se référant à l'API v1, j'ai ajouté un nouvel élément de réponse ci-dessous pour celui qui est à l'aide de Google Maps API Android v2
Vous devez vous connecter pour publier un commentaire.
Avec Google Maps API Android v2 vous pouvez utiliser un GoogleMap.OnCameraChangeListener comme ceci:
setOnCameraChangeListener()
est maintenant obsolèteVous pouvez mettre en place votre propre base de "polling" de la valeur du zoom pour détecter lorsque le zoom a été modifié à l'aide de l'android Gestionnaire.
En utilisant le code suivant pour votre praticable événement. C'est là que votre traitement doit être fait.
Commencer un rappel d'événement à l'aide de
et arrêter quand vous partez de l'activité à l'aide de
Article ceci est basé sur peut être trouvé ici si vous voulez un plus à écrire.
- Je utiliser cette bibliothèque qui a un onZoom fonction d'auditeur. http://code.google.com/p/mapview-overlay-manager/. Fonctionne bien.
Que l'OP dit, l'utilisation de la onUserInteractionEvent et faire le test vous-même.
onUserInteractionEvent()
est appelé avant le niveau de zoom changements. Cela signifie qu'à chaque zoom de l'événement, la surveillance de l'application le zoom est en cours d'exécution d'un événement derrière.Handler
instance et de vérifier régulièrement le niveau de zoom de modifications par le biais de quelque chose commepostDelayed(new Runnable() {...}, 500)
, mais je n'aime vraiment pas cette solution.Ici est une solution propre. Il suffit d'ajouter cette TouchOverlay privé de classe à votre activité et à une méthode de onZoom (qui est appelé par ce intérieur de la classe).
Note, vous devez ajouter cette TouchOverlay à votre mapView par exemple
Elle permet de suivre le niveau de zoom lorsque l'utilisateur touche la carte, par exemple pour le double-tap ou de zoom par pincement et puis les feux de la onZoom méthode (avec le niveau de zoom) si le niveau de zoom changements.
La l'API android vous suggère d'utiliser ZoomControls qui a un setOnZoomInClickListener()
Pour ajouter ces commandes de zoom vous:
Puis ajouter mZoom à votre disposition.
Vous Pouvez utiliser
espère que cela aide
Je pense qu'il pourrait y une autre réponse à cette question. La Superposition de la classe de tirage méthode est appelée après tout zoom et je crois que c'est appelé d'après le niveau de zoom changements. Ne pourriez-vous pas l'architecte de votre application pour prendre avantage de cela? Vous pouvez même utiliser un mannequin d'une superposition de détecter si vous voulais. Ne serait-ce pas plus efficace que d'utiliser un exécutable avec un retard?
U peut avoir de Zoom CControl comme ça.
Ici, je joins le code comment u peut mettre en œuvre zoomcontrol.
1>> XML fichier devrait ressembler à ceci.
2>> Sur votre activité principale à l'intérieur de méthode oncreate faire à la suite des choses.
ici, vous êtes gonflant votre point de vue avec mapView
...........................................................
C'est comment vous pouvez utiliser la fonction intégrée de contrôle de zoom de l'API..
Vous pouvez avoir votre propre code personnalisé pour mettre en œuvre Zoom in Et Zoom out comme ça...
..C'est de cette façon que j'ai de mise en œuvre...
Merci..Rakesh
Pour le pré-V2.0, j'ai fait une classe qui étend la MapView que les alertes à un écouteur d'événements lorsque la carte de la région commence à changer (onRegionBeginChange) et cesse de changer (onRegionEndChange).
J'ai utilisé un mélange de ceux-ci. J'ai trouvé que l'utilisation de la timmer pour démarrer un thread à chaque une demi-seconde cause de la carte pour être vraiment jenky. Probablement parce que j'ai été en utilisant un couple de Cas relevés à chaque fois. J'ai donc commencé à les enfiler sur un post délai de 500 ms à partir de la onUserInteraction. Cela donne suffisamment de temps pour le zoomLevel pour mettre à jour avant le thread commence à courir ainsi obtenir la bonne zoomlevel sans l'exécution d'un thread toutes les 500ms.