2016-08-02 173 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文件中。