2016-08-02 172 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不會分配內存並導致我的應用程序在每次回調時由於gc運行而調用getCameraPosition時都會出現口吃。 :/ –

+1

@MatthiasSchicker - 隨時[針對地圖SDK提交問題](https://code.google.com/p/gmaps-api-issues/) – ianhanniballake

+0

實際上這是Google Maps SDK中的一個已知問題(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.OnCameraIdleListenerGoogleMap.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

我在'setOnCameraIdleListener'上調用api,它在地圖上繪製標記,但是當我點擊'marker'時,又調用了'setOnCameraIdleListener',該怎麼辦? –

4

明智的做法是使用新推出四款相機的聽衆(OnCameraIdleListenerOnCameraMoveListenerOnCameraMoveStartedListenerOnCameraMoveCanceledListener),但如果你還是想要去的android-maps-utilssetOnCameraChangeListener使用特定版本(下面給出)

編譯'com.google.maps.android:android-maps-utils:0.4.3'

在你的模塊級別的gradle文件中。