2016-08-02 12 views
24

Heute, im Rückblick auf meinen alten Code, habe ich herausgefunden, dass OnCameraChangeListener() ist jetzt veraltet.OnCameraChangeListener() ist veraltet

ich schwierig bin zu finden, zu verstehen, wie dieses Stück Code von mir zu beheben:

mGoogleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 
    @Override 
    public void onCameraChange(CameraPosition cameraPosition) { 
     // Cleaning all the markers. 
     if (mGoogleMap != null) { 
      mGoogleMap.clear(); 
     } 

     mPosition = cameraPosition.target; 
     mZoom = cameraPosition.zoom; 

     if (mTimerIsRunning) { 
      mDragTimer.cancel(); 
     } 

     mDragTimer.start(); 
     mTimerIsRunning = true; 
    } 
}); 

Der neue Hörer (aka OnCameraMoveListener()) Methode onCameraMove() nicht über ein CameraPosition cameraPosition Eingangsvariable, also bin ich ziemlich verloren: Gibt es eine Möglichkeit, meinen alten Code zu recyceln?

Here sind einige Referenzen.

Antwort

25

In dem neuen Modell für camera change events, sind Sie richtig, dass die CameraPosition nicht in den Listener übergeben wird.

Stattdessen sollten Sie einfach getCameraPosition() verwenden, wann immer Sie es benötigen (d. H. Wann die Bewegung beginnt, Mitte bewegt, abgebrochen oder beendet/in den Leerlauf zurückgekehrt ist).

+0

Das wäre einfach genug - wenn getCameraPosition Speicher nicht zuordnen würde und meine App stottern würde, wenn getCameraPosition bei jedem Callback aufgerufen würde, weil GC läuft. :/ –

+1

@MatthiasSchicker - Ein Problem mit dem Google Maps SDK melden (https://code.google.com/p/gmaps-api-issues/) – ianhanniballake

+0

Es war ein bekanntes Problem mit dem Google Maps SDK (https://code.google.com/p/gmaps-api-issues/issues/detail?id=6483), aber es scheint jetzt behoben zu sein. Entschuldigung, war nicht auf dem neuesten Stand. –

42

In play-services-maps 9.4.0 version of the API, Sie ersetzten GoogleMap.OnCameraChangeListener() mit drei Kamera Hörer:

  • GoogleMap.OnCameraMoveStartedListener
  • GoogleMap.OnCameraMoveListener
  • GoogleMap.OnCameraIdleListener

Basierend auf Ihren Code, ich glaube, Sie GoogleMap.OnCameraIdleListener und GoogleMap.OnCameraMoveStartedListener verwenden müssen so:

mGoogleMap.setOnCameraMoveStartedListener(new GoogleMap.OnCameraMoveStartedListener() { 
      @Override 
      public void onCameraMoveStarted(int i) { 
       mDragTimer.start(); 
       mTimerIsRunning = true; 
      } 
     }); 

     mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
      @Override 
      public void onCameraIdle() { 
       // Cleaning all the markers. 
       if (mGoogleMap != null) { 
        mGoogleMap.clear(); 
       } 

       mPosition = mGoogleMap.getCameraPosition().target; 
       mZoom = mGoogleMap.getCameraPosition().zoom; 

       if (mTimerIsRunning) { 
        mDragTimer.cancel(); 
       } 

      } 
     }); 
+0

Ich rufe eine API auf 'setOnCameraIdleListener' und es zeichnet Marker in der Karte, aber wenn ich auf den' Marker' klicke, wird 'setOnCameraIdleListener' wieder aufgerufen, was tun? –

4

Es empfiehlt sich neu eingeführten vier Kamera Hörer zu verwenden (OnCameraIdleListener, OnCameraMoveListener, OnCameraMoveStartedListener, OnCameraMoveCanceledListener), aber wenn Sie noch mit setOnCameraChangeListener Gebrauch bestimmte Version von android-maps-utils (Da unten)

hinwollen kompilieren Sie "com.google.maps.android:android-maps-utils:0.3"

in Ihrer Modullevel-Datei.