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.
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.
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.
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.
Se produit lorsqu'un mouvement de caméra animé, tel que `ʻanimateCamera``, est annulé par une opération. "Une opération" est
est.
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)
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.
** 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é.
ʻ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é.
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é.
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.
ʻonCancel`` ne soit notifié à
ʻanimateCamera,` ʻonCameraMoveStarted
est notifié en faisant glisser.ʻOnCameraMoveStarted`` est notifié deux fois (lors de l'appel de
ʻanimateCamera et lorsque le glissement commence), mais` ʻonCameraIdle
est notifié une seule fois à la fin.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à.
Appeler simplement stopAnimation
appellera ~~ ʻonCameraChange`` ~~,
ʻonCameraIdle``. Ça fait mal.
ʻonCameraIdle`` comme alternative au
ʻonCameraChange`` obsolète, mais sachez que le moment de l'occurrence peut être différent pour Bimyo!ʻonCameraMoveStarted`` nouvellement ajouté peut commencer à déplacer la caméra, et
ʻonCameraMove`` peut recevoir la caméra en mouvement. vous avertira non seulement lorsque la caméra est déplacée par la méthode, mais également lorsque la caméra est déplacée par le geste. La fin / interruption de l'animation ```animateCamera
est reçue par l'argument callback.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. .. ..