Die Google Maps-Bibliothek für Android hat ein Ereignis "GoogleMap.OnCameraChangeListener", das auftritt, wenn eine Kamera geändert wird (= Änderung der Position, Drehung, Neigung).
Mit der Veröffentlichung im August 2016 wurde "OnCameraChangeListener" jedoch nicht mehr unterstützt und stattdessen wurden vier neue Ereignisse hinzugefügt.
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.
Tritt einmal unmittelbar nach dem Bewegen der Kamera auf. Gleiches gilt für das Bewegen der Kamera mit Methoden wie "updateCamera" und "animateCamera" sowie mit Gesten wie Ziehen und Kneifen.
Tritt einmal unmittelbar nach Abschluss der Kamerabewegung auf. Mit anderen Worten, wenn eine Ansichtsänderung auftritt, wird "onCameraMoveIdle" am Ende einmal aufgerufen. Das onCameraMoveIdle
wird immer noch aufgerufen, wenn die Animation abgebrochen wird.
Es ähnelt in seiner Position dem veralteten "onCameraChange". Übrigens, nachdem "onCameraChange" aufgerufen wurde, wird "onCameraMoveIdle" aufgerufen.
Wenn "onCameraMoveStarted" und "onCameraMoveIdle" immer gepaart sind, gibt es ** Fälle, in denen dies nicht der Fall ist. Dies ist der Fall, wenn die Karte durch Ziehen der Karte verschoben wird, während die Karte von "animateCamera" verschoben wird. Dies wird später besprochen.
Tritt auf, wenn sich die Kamera bewegt. Bei direkten Kamerapositionsbewegungen mit moveCamera
kann dieses Ereignis ** auftreten ** oder nicht **. Animierte Bewegungen mit "animateCamera" lösen dieses Ereignis während der Animation aus. Dies tritt auch bei Gestenoperationen wie Ziehen und Kneifen auf.
Tritt auf, wenn eine animierte Kamerabewegung, z. B. "animateCamera", durch eine Aktion abgebrochen wird. "Irgendeine Operation" ist
stopAnimation
aufgerufenist.
animateCamera
RückrufFür animateCamera
können Sie einen Rückruf angeben, der den Abschluss / die Stornierung der Animation erhalten kann.
public final void animateCamera (
CameraUpdate update,
GoogleMap.CancelableCallback callback)
Ich habe eine Beispiel-App erstellt und versucht herauszufinden, welche Art von Ereignis im tatsächlichen Betrieb auftreten würde.
** Es scheint, dass "onCameraMove" auftreten kann oder nicht **, ich war mir über den Zustand nicht sicher (es scheint, dass "onCameraMove" nicht auftritt, weil sich die Position ändert) ). Da onCameraChange
veraltet ist, ist es durchgestrichen.
OnCameraMove
wird während des Umzugs mehrmals aufgerufen. Die Häufigkeit hängt von der Geschwindigkeit der Animation ab.
Wenn der Umzug abgeschlossen ist, wird der Rückruf der Methode "animateCamera" über "onFinish" benachrichtigt und anschließend "onCameraIdle" aufgerufen.
stopAnimation
aufWenn Sie während der Animation stopAnimation
aufrufen, bleibt die Kamera stehen und Sie werden über den Stopp in der Reihenfolge onCameraMoveCanceled
→ animateCamera_onCancel
benachrichtigt. Danach wird "onCameraIdle" genau so aufgerufen, wie es abgeschlossen wurde.
Wenn Sie beim Verschieben der Karte ziehen, benachrichtigt Sie "onCameraMoveCanceled" über die Unterbrechung und sofort über "onCameraMoveStarted" als neue Kamerabewegung. Erst danach wird animateCamera
benachrichtigt, dass die Animation animateCamera_onCancel
gestoppt hat.
Danach trat "onCameraMove" durch Ziehen kontinuierlich auf, und als das Ziehen gestoppt wurde, wurde ~~ onCameraChange
~~ zweimal aufgerufen und onCameraIdle
am Ende einmal aufgerufen.
Das Folgende ist eine Zusammenfassung der Punkte, die in diesem Fall zu beachten sind.
OnCameraMoveStarted
durch Ziehen wird benachrichtigt, bevor onCancel
an animateCamera
benachrichtigt wird. OnCameraMoveStarted
wird zweimal benachrichtigt (wenn animateCamera
aufgerufen wird und wenn das Ziehen beginnt), aber onCameraIdle
wird am Ende nur einmal benachrichtigt.Wenn Sie mehrere Ereignisse mit RxJava usw. streamen, müssen Sie die Reihenfolge und Anzahl der auftretenden Ereignisse kennen, aber ich bin der Meinung, dass dies zu diesem Zeitpunkt möglicherweise ein Problem darstellt.
Wenn Sie einfach stopAnimation
aufrufen, wird ~~ onCameraChange
~~, onCameraIdle
aufgerufen. Es fühlt sich schlecht an.
onCameraXXXX
benachrichtigt Sie nicht nur, wenn die Kamera durch die Methode bewegt wird, sondern auch, wenn die Kamera durch die Geste bewegt wird. Das Ende / die Unterbrechung der Animation von "animateCamera" wird durch den Rückruf des Arguments empfangen.Im Google Maps SDK für iOS, unserer Schwesterbibliothek, kamerabezogene Ereignisse
Es ist in. demzufolge,
es gibt. Es ist ärgerlich, weil es für Android ist. .. ..
Recommended Posts