gpt4 book ai didi

android-camerax - 如何使用 camerax 和 TextureView 平滑地处理方向变化?

转载 作者:行者123 更新时间:2023-12-04 17:37:14 33 4
gpt4 key购买 nike

我正在尝试在方向更改时实现平稳过渡,就像普通相机应用程序所做的那样(图标旋转,相机 View 不闪烁)。

我已经通过设置 ROTATION_ANIMATION_CROSSFADE 完成了图标旋转部分,并在创建事件时手动启动动画。

但是我的 TextureView(camerax 正在渲染的地方)是在配置更改时重新创建的,因此它会在方向更改时淡化为黑色。

如何避免重新创建 View ?我应该自己处理配置更改吗?

最佳答案

添加

android:screenOrientation="portrait"

您在 list 文件中的事件。然后,事件将不会在设备旋转时重新创建。之后,自行处理方向变化。我更喜欢使用 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。

另请注意,您需要在 onPause() 方法中禁用 orientationEventListener。

编辑:

** Helper function that gets the rotation of a [Display] in degrees */
fun getOrientation(rotation: Int?) = when (rotation) {
0 -> Surface.ROTATION_0
90 -> Surface.ROTATION_90
180 -> Surface.ROTATION_180
270 -> Surface.ROTATION_270
else -> Surface.ROTATION_0
}

关于android-camerax - 如何使用 camerax 和 TextureView 平滑地处理方向变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145628/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com