Informationen zum Kamerawechselereignis der Google Maps Android API

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.

onCameraMoveStarted - Wenn sich die Kamera in Bewegung setzt

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.

onCameraMoveIdle-Wenn die Kamera fertig ist

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.

onCameraMove - wenn sich die Kamera bewegt

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.

onCameraMoveCanceled - wenn die Animation abgebrochen wird

Tritt auf, wenn eine animierte Kamerabewegung, z. B. "animateCamera", durch eine Aktion abgebrochen wird. "Irgendeine Operation" ist

ist.

[Bonus] animateCamera Rückruf

Fü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)

Status des Ereignisses für jeden Fall

Ich habe eine Beispiel-App erstellt und versucht herauszufinden, welche Art von Ereignis im tatsächlichen Betrieb auftreten würde.

Ausführen der updateCamera-Methode

  1. onCameraMoveStarted
  2. onCameraMove ← Kann nicht auftreten
  3. ~~onCameraChange~~
  4. onCameraIdle

** 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.

Ausführung der animateCamera-Methode (ohne Unterbrechung)

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

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.

Führen Sie die animateCamera-Methode aus → Führen Sie stopAnimation aus

  1. onCameraMoveStarted
  2. onCameraMove
  3. ・ ・ ・
  4. onCameraMove
  5. Rufen Sie stopAnimation auf
  6. onCameraMoveCanceled
  7. animateCamera_onCancel
  8. ~~onCameraChange~~
  9. onCameraIdle

Wenn 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.

Ausführung der animateCamera-Methode → Ziehen Sie während des Verschiebens, um die Karte zu verschieben

  1. onCameraMoveStarted ← Bewegen Sie sich mit animateCamera
  2. onCameraMove
  3. ・ ・ ・
  4. onCameraMove
  5. Ziehen Sie, um die Karte zu verschieben
  6. onCameraMoveCanceled
  7. onCameraMoveStarted ← Bewegen Sie sich durch Ziehen
  8. animateCamera_onCancel
  9. onCameraMove
  10. onCameraMove
  11. ・ ・ ・
  12. Hören Sie auf zu ziehen
  13. ~~ onCameraChange ~~ ← Bewegungsende von animateCamera?
  14. onCameraMove
  15. onCameraMove
  16. ~~ onCameraChange ~~ ← Bewegungsende durch Ziehen?
  17. onCameraIdle

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.

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.

Rufen Sie stopAnimation auf, wenn Sie nicht animiert sind

  1. ~~onCameraChange~~
  2. onCameraIdle

Wenn Sie einfach stopAnimation aufrufen, wird ~~ onCameraChange ~~, onCameraIdle aufgerufen. Es fühlt sich schlecht an.

Zusammenfassung

[Bonus] Google Maps SDK für iOS

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

Informationen zum Kamerawechselereignis der Google Maps Android API
Erklären von JavaScript der Google Maps Geocoding API
Beachten Sie, dass GoogleMap.getProjection in der Android-API von Google Maps kein Singleton ist
Erstellen Sie eine Tweet-Heatmap mit der Google Maps-API
Spielen Sie Musik, indem Sie auf die inoffizielle API von Google Play Music klicken
Ändern Sie das Thema von Jupyter
Ändern Sie den Stil von matplotlib
Über die Komponenten von Luigi
Anfänger der Google Maps API und der Twitter API haben "Tweet Map" erstellt.
Über die Funktionen von Python
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Informationen zur SystemChannels-API, um die plattformspezifischen Funktionen von Flutter zu nutzen
Python-Anfänger nutzen die inoffizielle API von Google Play Music, um Musik abzuspielen
Denken Sie an das Problem der minimalen Änderung
Ändern Sie den Hintergrund von Ubuntu (GNOME)
[Python] Klicken Sie auf die Google Übersetzungs-API
Über den Rückgabewert von pthread_mutex_init ()
Über den Rückgabewert des Histogramms.
Über den Grundtyp von Go
Über die Obergrenze von Threads-max
Passen Sie infoWindow für Google Maps für Android an
Ändern Sie das Suffix von django-filter / DateFromToRangeFilter
Über das Verhalten von Yield_per von SqlAlchemy
Über die Größe der Punkte in Matplotlib
Informationen zur Grundlagenliste der Python-Grundlagen
[Android] Zeigen Sie Bilder im Web im infoWindow von Google Map an
Der API-Client für die Sitemap in der Google-Suchkonsole befindet sich in Webmastern anstelle der Suchkonsole
Bestimmen Sie die Authentizität von veröffentlichten Artikeln durch maschinelles Lernen (Google Prediction API).
Ändern Sie die Länge der Python-CSV-Zeichenfolgen
Skript zum Ändern der Beschreibung von Fasta
Informationen zum Verhalten von enable_backprop von Chainer v2
Informationen zur virtuellen Umgebung von Python Version 3.7
Erhalten Sie Parlamentsprotokolle über API
Über die Argumente der Setup-Funktion von PyCaret
Über die Normalgleichung der linearen Regression
Ändern Sie die Reihenfolge von PostgreSQL in Heroku
Holen Sie sich Urlaub mit der Google Kalender-API
Ändern Sie den Ziel-Batfish-Server von Pybatfish
Über das Problem, dass die Python-Version von Google App Engine nicht ineinander greift