不推荐使用OnCameraChangeListener()

时间:2016-08-02 18:01:34

标签: android listener deprecated

今天,回顾我的旧代码,我发现 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是一些参考资料。

5 个答案:

答案 0 :(得分:54)

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

            }
        });

答案 1 :(得分:29)

camera change events的新模型中,您是正确的,CameraPosition未传递给侦听器。

相反,只要你特别需要它就可以使用getCameraPosition()(例如,当移动开始,移动中,取消或完成/返回空闲时)。

答案 2 :(得分:4)

建议使用新引入的四个相机听众(OnCameraIdleListenerOnCameraMoveListenerOnCameraMoveStartedListenerOnCameraMoveCanceledListener),但如果您仍想使用{{1使用特定版本的setOnCameraChangeListener(如下所示)

  

编译'com.google.maps.android:android-maps-utils:0.4.3'

在模块级gradle文件中。

答案 3 :(得分:3)

我只是在Kotlin中更新@ Barrak90的答案。 由于OnCameraChangeListener()现在已弃用,因此您可以使用

mMap.setOnCameraMoveStartedListener { reason: Int ->
            when (reason) {
                GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
                    Log.d("camera", "The user gestured on the map.")
                }
                GoogleMap.OnCameraMoveStartedListener
                        .REASON_API_ANIMATION -> {
                    Log.d("camera", "The user tapped something on the map.")
                }
                GoogleMap.OnCameraMoveStartedListener
                        .REASON_DEVELOPER_ANIMATION -> {
                    Log.d("camera", "The app moved the camera.")
                }
            }
        }

mMap.setOnCameraIdleListener {
    val midLatLng: LatLng = mMap.cameraPosition.target//map's center position latitude & longitude
        }

mMap.setOnCameraMoveStartedListener {

        }

这里mMapGoogleMap对象,我在内部调用它

override fun onMapReady(map: GoogleMap?) {
        mMap = map as GoogleMap
        //your stuff
    }

答案 4 :(得分:1)

使用 mGoogleMap.setOnCameraIdleListener ,而不是 mGoogleMap.setOnCameraChangeListener

mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
            @Override
            public void onCameraIdle() {
                 mPosition = mGoogleMap.getCameraPosition().target;
                 mZoom = mGoogleMap.getCameraPosition().zoom;

                double lat =  mGoogleMap.getCameraPosition().target.latitude;
                double lng =  mGoogleMap.getCameraPosition().target.longitude;


           }
        });