[JAVA] À propos de l'événement de changement de caméra de l'API Google Maps Android

La bibliothèque Google Maps pour Android a un événement `` GoogleMap.OnCameraChangeListener '' qui se produit quand une caméra est modifiée (= changement de position, rotation, inclinaison).

Cependant, avec la version d'août 2016, `ʻOnCameraChangeListener`` est devenu obsolète et quatre nouveaux événements ont été ajoutés à la place.

This release introduces a set of new camera change listeners for camera motion start, ongoing, and end events. You can also see why the camera is moving, whether it's caused by user gestures, built-in API animations or developer-controlled movements. Below is a summary of the new listeners. For details, see the guide to camera change events. (Issue 4636)

  • The onCameraMoveStarted() callback of the OnCameraMoveStartedListener is invoked when the camera starts moving. The callback method receives a reason for the camera motion.
  • The onCameraMove() callback of the OnCameraMoveListener is invoked multiple times while the camera is moving or the user is interacting with the touch screen.
  • The OnCameraIdle() callback of the OnCameraIdleListener is invoked when the camera stops moving and the user has stopped interacting with the map.
  • The OnCameraMoveCanceled() callback of the OnCameraMoveCanceledListener is invoked when the current camera movement has been interrupted.

onCameraMoveStarted-Lorsque la caméra commence à bouger

Se produit une fois immédiatement après que la caméra commence à bouger. La même chose s'applique au déplacement de la caméra par des méthodes telles que ʻupdateCamera`` et ʻanimateCamera``, et par des gestes tels que glisser et pincer.

onCameraMoveIdle-Lorsque la caméra a fini de bouger

Se produit une fois immédiatement après la fin du mouvement de la caméra. Cela signifie que chaque fois qu'un changement de vue se produit, ʻonCameraMoveIdle`` est toujours appelé une fois à la fin. Le ʻonCameraMoveIdle`` est toujours appelé lorsque l'animation est annulée. Il est similaire en position à la version obsolète «onCameraChange». Au fait, après l'appel de «onCameraChange», «onCameraMoveIdle» est appelé.

Si ʻonCameraMoveStarted`` et ʻonCameraMoveIdle sont toujours appariés, il y a ** des cas où ils ne le sont pas **. C'est le cas lorsque la carte est déplacée en faisant glisser la carte pendant que la carte est déplacée par `ʻanimateCamera. Cela sera discuté plus tard.

onCameraMove - lorsque la caméra bouge

Se produit lorsque la caméra bouge. Pour les mouvements de position directe de la caméra avec moveCamera '', cet événement ** peut ou non se produire **. Les mouvements animés avec `ʻanimateCamera déclenchent cet événement pendant l'animation. Cela se produit également avec des opérations gestuelles telles que le glissement et le pincement.

onCameraMoveCanceled-lorsque l'animation est annulée

Se produit lorsqu'un mouvement de caméra animé, tel que `ʻanimateCamera``, est annulé par une opération. "Une opération" est

est.

[Bonus] Rappel de `ʻanimateCamera``

Pour `ʻanimateCamera``, vous pouvez spécifier un callback qui peut recevoir l'achèvement / l'annulation de l'animation.

public final void animateCamera (
    CameraUpdate update, 
    GoogleMap.CancelableCallback callback)

État d'occurrence de l'événement pour chaque cas

J'ai créé un exemple d'application et j'ai essayé de savoir quel type d'événement se produirait dans l'opération réelle.

Exécution de la méthode updateCamera

  1. onCameraMoveStarted
  2. onCameraMove ← Peut ne pas se produire
  3. ~~onCameraChange~~
  4. onCameraIdle

** Il semble que ʻonCameraMove`` puisse se produire ou non **, je n'étais pas sûr de la condition (il semble que ʻonCameraMove ne se produise pas parce que la position change. ). Puisque `ʻonCameraChange est obsolète, il est barré.

Exécution de la méthode animateCamera (sans interruption)

  1. onCameraMoveStarted
  2. onCameraMove
  3. onCameraMove
  4. ・ ・ ・
  5. animateCamera_onFinish
  6. ~~onCameraChange~~
  7. onCameraIdle

ʻOnCameraMove`` est appelé plusieurs fois pendant le déplacement. Le nombre de fois dépend de la vitesse de l'animation. Lorsque le déplacement est terminé, le callback de la méthode ʻanimateCamera sera notifié de` ʻonFinish puis` ʻonCameraIdle`` sera appelé.

Exécuter la méthode animateCamera → Exécuter stopAnimation

  1. onCameraMoveStarted
  2. onCameraMove
  3. ・ ・ ・
  4. onCameraMove
  5. Appelez `` stopAnimation ''
  6. onCameraMoveCanceled
  7. animateCamera_onCancel
  8. ~~onCameraChange~~
  9. onCameraIdle

Si vous appelez stopAnimation pendant l'animation, la caméra s'arrêtera de bouger et vous serez notifié de l'arrêt dans l'ordre de ʻonCameraMoveCanceled`` → ʻanimateCamera_onCancel. Après cela, `ʻonCameraIdle est appelé tel qu'il était quand il a été terminé.

Exécution de la méthode animateCamera → Faites glisser en vous déplaçant pour déplacer la carte

  1. onCameraMoveStarted ← Commencez à vous déplacer par animateCamera
  2. onCameraMove
  3. ・ ・ ・
  4. onCameraMove
  5. Faites glisser pour déplacer la carte
  6. onCameraMoveCanceled
  7. onCameraMoveStarted ← Commencez à vous déplacer en faisant glisser
  8. animateCamera_onCancel
  9. onCameraMove
  10. onCameraMove
  11. ・ ・ ・
  12. Arrêtez de faire glisser
  13. ~~ onCameraChange ~~ ← Fin du mouvement par animateCamera?
  14. onCameraMove
  15. onCameraMove
  16. ~~ onCameraChange ~~ ← Fin du mouvement en faisant glisser?
  17. onCameraIdle

Si vous faites glisser tout en déplaçant la carte, «onCameraMoveCanceled» vous informera de l'interruption et vous informera immédiatement de «onCameraMoveStarted» comme un nouveau mouvement de caméra. C'est après cela que ʻanimateCamera`` est notifié de l'annulation de l'animation ʻanimateCamera_onCancel``.

Après cela, ʻonCameraMove`` par glissement se produisait continuellement, et quand le glissement était arrêté, ~~ ʻonCameraChange ~~ était appelé deux fois, et `ʻonCameraIdle était appelé une fois à la fin.

Voici un résumé des points à noter dans ce cas.

Lorsque vous diffusez plusieurs événements avec RxJava etc., vous devez être conscient de l'ordre et du nombre d'événements qui se produisent, mais je pense que cela peut être un problème à ce moment-là.

Appel stopAnimation lorsqu'il n'est pas animé

  1. ~~onCameraChange~~
  2. onCameraIdle

Appeler simplement stopAnimation appellera ~~ ʻonCameraChange`` ~~, ʻonCameraIdle``. Ça fait mal.

Résumé

[Bonus] SDK Google Maps pour iOS

Dans le SDK Google Maps pour iOS, notre bibliothèque sœur, les événements liés à la caméra

C'est dedans. selon ce,

il y a. C'est ennuyeux car c'est pour Android. .. ..

Recommended Posts

À propos de l'événement de changement de caméra de l'API Google Maps Android
Expliquer JavaScript de l'API de géocodage de Google Maps
Notez que GoogleMap.getProjection dans l'API Google Maps Android n'est pas un singleton
Créez une carte thermique de tweet avec l'API Google Maps
Écoutez de la musique en accédant à l'API non officielle de Google Play Music
Changer le thème de Jupyter
Changer le style de matplotlib
À propos des composants de Luigi
Les débutants de l'API Google Maps et de l'API Twitter ont créé "Tweet Map"
À propos des fonctionnalités de Python
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
À propos de l'API SystemChannels pour tirer parti des fonctionnalités spécifiques à la plate-forme Flutter
Les débutants en Python utilisent l'API non officielle de Google Play Music pour jouer de la musique
Pensez au problème de changement minimum
Changer l'arrière-plan d'Ubuntu (GNOME)
[Python] Accédez à l'API Google Translation
À propos de la valeur de retour de pthread_mutex_init ()
À propos de la valeur de retour de l'histogramme.
À propos du type de base de Go
À propos de la limite supérieure de threads-max
Personnaliser infoWindow pour Google Maps pour Android
Changer le suffixe de django-filter / DateFromToRangeFilter
À propos du comportement de yield_per de SqlAlchemy
À propos de la taille des points dans matplotlib
À propos de la liste de base des bases de Python
[Android] Afficher des images sur le Web dans la fenêtre info de Google Map
Le client API pour le plan du site dans la console de recherche Google est dans les webmasters au lieu de searchconsole
Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).
Changer la longueur des chaînes csv Python
Script pour changer la description de fasta
A propos du comportement de enable_backprop de Chainer v2
À propos de l'environnement virtuel de Python version 3.7
Obtenez les débats parlementaires via l'API
A propos des arguments de la fonction setup de PyCaret
À propos de l'équation normale de la régression linéaire
Changer l'ordre de PostgreSQL dans Heroku
Obtenez des vacances avec l'API Google Agenda
Changer le serveur Batfish de destination de pybatfish
À propos du problème que la version python de Google App Engine ne maille pas