Как плавно справиться с изменением ориентации с помощью camerax и TextureView?

Я пытаюсь получить плавный переход при смене ориентации, как это делает стоковое приложение камеры (значки вращаются, изображение с камеры не мигает).

Я уже сделал часть поворота значка, установив ROTATION_ANIMATION_CROSSFADE и вручную запустить анимацию при создании активности.

Но мой TextureView (где CameraX рендеринг) воссоздается при изменениях конфигурации, поэтому он меняется на черный при изменении ориентации.

Как я могу избежать воссоздания вида? Должен ли я справиться с изменением конфигурации самостоятельно?

1 ответ

Добавлять

android:screenOrientation="portrait"

к вашей активности в файле манифеста. Тогда действие не будет воссоздано при ротации устройства. После этого обработайте изменение ориентации самостоятельно. Я предпочитаю делать это с OrientationChangeListener.

@Override
public void onResume() {
       //handle orientation change
        orientationEventListener = new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_NORMAL) {
            @Override
            public void onOrientationChanged(int orientation) {
                updateUi(orientation); //rotate ui elements on orientation change
                videoCapture?.setTargetRotation(getOrientation(orientationHint)) //notify the capture session about the orientation change
            }
        };
        orientationEventListener.enable();
}

Метод getOrientation() возвращает одно целое число из целых чисел константы Surface: Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180 или Surface.ROTATION_270.

Также обратите внимание, что вам нужно отключить directionEventListener в методе onPause().

Другие вопросы по тегам