Как плавно справиться с изменением ориентации с помощью camerax и TextureView? - PullRequest
1 голос
/ 15 мая 2019

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

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

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

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

1 Ответ

0 голосов
/ 15 мая 2019

Добавить

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 ().

...