Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OnCameraChangeListener()已被弃用_Android_Listener_Deprecated - Fatal编程技术网

Android OnCameraChangeListener()已被弃用

Android OnCameraChangeListener()已被弃用,android,listener,deprecated,Android,Listener,Deprecated,今天,回顾我的旧代码,我发现onCamerachenglistener()现在已经不受欢迎 我发现很难理解如何修复我的这段代码: mGoogleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { // Cleaning all the m

今天,回顾我的旧代码,我发现onCamerachenglistener()现在已经不受欢迎

我发现很难理解如何修复我的这段代码:

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输入变量,所以我很迷茫:有没有办法回收我的旧代码

是一些参考。

在的新模型中,正确的是,
CameraPosition
没有传递到侦听器中

相反,您应该在您特别需要时使用它(即,移动开始、移动中、取消或完成/返回空闲状态时)。

在中,他们用三个摄像头侦听器取代了
GoogleMap.OnCameraChangeListener()

  • GoogleMap.OnCameraMoveStartedListener
  • GoogleMap.OnCameraMoveListener
  • GoogleMap.onCameraideListener
基于您的代码,我认为您需要使用
GoogleMap.onCameraideListener
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();
                }

            }
        });

建议使用新推出的四个摄像头监听器(
onCameradleListener
OnCameraMoveListener
OnCameraMoveStartedListener
OnCameraMoveCanceledListener
),但如果您仍然想使用
setOnCamerachengeListener
,请使用特定版本的
android maps utils
(见下文)

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


在您的模块级gradle文件中。

onnCameraChangeListener()
现在已被弃用,您可以使用

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 {

        }
这里
mMap
GoogleMap
对象,我在里面调用它

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

使用mGoogleMap.setonCameradleListener而不是mGoogleMap.setonCamerachengeListener

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;


           }
        });

如果getCameraPosition由于gc运行而在每次回调时调用getCameraPosition时都不会分配内存并导致我的应用程序结巴,那么这将非常简单。//@MatthiasSchicker-请放心,这实际上是Google Maps SDK的一个已知问题()但它现在似乎已被修复。抱歉,不是最新的。我正在调用
SetonCameradleListener
上的api,并在地图中绘制标记,但当我单击
marker
时,
SetonCameradleListener
再次被调用,该怎么办?@RohitKhatri,您应该调用
googleMap.SetonCameradleListener(null)
在该侦听器的末尾。