2016-08-02 15 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()を使用するだけです。 play-services-maps 9.4.0 version of the API

+0

これは簡単です.getCameraPositionによってメモリが割り当てられず、gcが実行されるたびにすべてのコールバックでgetCameraPositionを呼び出すだけで、自分のアプリが途切れることがあります。 :/ –

+1

@MatthiasSchicker - [Maps SDKに問題を提出](https://code.google.com/p/gmaps-api-issues/) – ianhanniballake

+0

GoogleマップSDKの既知の問題でした(https://code.google.com/p/gmaps-api-issues/issues/detail?id=6483)、現在は修正されているようです。申し訳ありませんが、最新のものではありませんでした。 –

42

、彼らは3人のカメラのリスナーに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

新しく導入された4つのカメラリスナー(OnCameraIdleListenerOnCameraMoveListenerOnCameraMoveStartedListenerOnCameraMoveCanceledListener)を使用することをお勧めしていますが、まだandroid-maps-utilssetOnCameraChangeListener使用特定のバージョンと一緒に行きたい場合は

(下記の)コンパイル 'com.google.maps.android:android-maps-utils:0.4.3

をモジュールレベルのgradleファイルにコンパイルします。

関連する問題