CameraX仅适配横屏:竖屏握持时需显示横屏画面的问题
CameraX竖屏握持时保持横屏预览的解决办法
基于你使用的CameraXBasic示例项目,针对修改Manifest设置后的需求,整理以下实操步骤:
1. 强制相机预览输出为横屏方向
在CameraFragment的startCamera方法中,给Preview用例设置固定目标旋转,让相机输出始终对齐横屏方向:
val preview = Preview.Builder() // 若测试后画面颠倒,可替换为Surface.ROTATION_270 .setTargetRotation(Surface.ROTATION_90) .build()
2. 适配预览View的旋转角度
设备竖屏握持时,屏幕旋转状态会变化,需给PreviewView设置对应旋转角度,保证画面显示正常:
val displayRotation = requireActivity().windowManager.defaultDisplay.rotation previewView.post { previewView.setDisplayOrientation( when(displayRotation) { Surface.ROTATION_0 -> 90 Surface.ROTATION_90 -> 0 Surface.ROTATION_180 -> 270 Surface.ROTATION_270 -> 180 else -> 0 } ) }
将这段代码放在startCamera方法里初始化预览的位置即可。
3. 处理Activity重建的状态恢复
由于你移除了configChanges配置,横竖屏切换会触发Activity重建,需保存相机关键状态避免重置:
// 保存当前相机ID状态 override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putString("SELECTED_CAMERA_ID", cameraId) } // 重建时恢复相机状态 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val savedCameraId = savedInstanceState?.getString("SELECTED_CAMERA_ID") ?: "0" startCamera(savedCameraId) }
完成以上修改后,竖屏握持手机时,Activity会保持横屏显示,相机预览画面也会以正确的横屏比例展示,不会出现拉伸或颠倒问题。
内容的提问来源于stack exchange,提问作者Metropol_Tilkisi
相关产品推荐
相关产品推荐

