You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:27:14