2016-08-02 6 views
24

Сегодня, оглядываясь на мой старый код, я узнал, что OnCameraChangeListener() теперь устарел.OnCameraChangeListener() устарел

Я найти трудно понять, как исправить этот кусок кода шахты:

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; 
    } 
}); 

Новый слушатель (ака OnCameraMoveListener()) метод onCameraMove() не имеет CameraPosition cameraPosition входная переменная, поэтому я довольно потерян: есть ли способ утилизировать мой старый код?

Here некоторые ссылки.

ответ

25

В новой модели для camera change events вы правы, что CameraPosition не передается слушателю.

Вместо этого вы должны просто использовать getCameraPosition() всякий раз, когда вам это нужно (т. Е. Когда движение начинается, перемещается, отменяется или заканчивается/возвращается в режим ожидания).

+0

Это было бы достаточно просто - если getCameraPosition не будет выделять память и заставить мое приложение заикаться при простое вызов getCameraPosition при каждом обратном вызове из-за запуска gc. :/ –

+1

@MatthiasSchicker - не стесняйтесь [сообщать об ошибке в отношении SDK карт] (https://code.google.com/p/gmaps-api-issues/) – ianhanniballake

+0

На самом деле это была известная проблема с SDK Google Maps (https://code.google.com/p/gmaps-api-issues/issues/detail?id=6483), но теперь он исправлен. Извините, не был последним. –

42

В play-services-maps 9.4.0 version of the API, они заменили GoogleMap.OnCameraChangeListener() с тремя слушателями камеры:

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

на основе кода, я думаю, вам нужно использовать GoogleMap.OnCameraIdleListener и GoogleMap.OnCameraMoveStartedListener Пример:

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

Я вызываю api на 'setOnCameraIdleListener' и он намечает маркеры на карте, но когда я нажимаю на« маркер », снова появляется вызов' setOnCameraIdleListener', что делать? –

4

Рекомендуется использовать вновь введенные четыре камеры слушателей (OnCameraIdleListener, OnCameraMoveListener, OnCameraMoveStartedListener, OnCameraMoveCanceledListener), но если вы все еще хотите, чтобы пойти с setOnCameraChangeListener использования конкретной версии android-maps-utils (Ниже)

compile 'com.google.maps.android:android-maps-utils:0.4.3'

в вашем файле уровня градиента уровня.

 Смежные вопросы

  • Нет связанных вопросов^_^