Подтвердить что ты не робот

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

Новый метод прослушивания (aka OnCameraMoveListener()) onCameraMove() не имеет входной переменной CameraPosition cameraPosition, поэтому я довольно потерян: есть ли способ утилизации моего старого кода?

Здесь некоторые ссылки.

Благодарим вас за помощь.

4b9b3361

Ответ 1

В новой модели для событий изменений камеры вы правы, что CameraPosition не передается в прослушиватель.

Вместо этого вы должны просто использовать getCameraPosition() всякий раз, когда вам это нужно (т.е. когда начинается перемещение, перемещение в середине, отменяется или завершается/возвращается холостой ход).

Ответ 2

В play-services-maps версии 9.4.0 API, они заменили GoogleMap.OnCameraChangeListener() тремя камерами:

  • GoogleMap.OnCameraMoveStartedListener
  • GoogleMap.OnCameraMoveListener
  • GoogleMap.OnCameraIdleListener

На основе вашего кода, я думаю, вам нужно использовать GoogleMap.OnCameraIdleListener и 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();
                }

            }
        });

Ответ 3

Рекомендуется использовать только что появившихся четырех слушателей камеры (OnCameraIdleListener, OnCameraMoveListener, OnCameraMoveStartedListener, OnCameraMoveCanceledListener), но если вы все еще хотите пойти с setOnCameraChangeListener, используйте определенную версию android-maps-utils ( Ниже)

compile 'com.google.maps.android:android-maps-utils:0.4.3'

на уровне вашего модуля gradle.