Как плавно справиться с изменением ориентации с помощью 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().