HarmonyOS 鸿蒙Next中三折叠和二折叠拍照预览时,画面方向不对

HarmonyOS 鸿蒙Next中三折叠和二折叠拍照预览时,画面方向不对 【问题描述】:我们app是有两套代码的,一套纯血鸿蒙,一套安卓版本,但是共同的部分页面使用的是flutter开发的(相机部分),用的是camera库,现在发现的问题是安卓和鸿蒙的三折叠以及鸿蒙的二折叠拍照页面有问题(画面变形、画面方向不对)这个该怎么处理????

cke_4062.png cke_1099.png


更多关于HarmonyOS 鸿蒙Next中三折叠和二折叠拍照预览时,画面方向不对的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者你好,

是否可以提供最小可复现demo,以便分析问题。

更多关于HarmonyOS 鸿蒙Next中三折叠和二折叠拍照预览时,画面方向不对的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


根据状态栏的位置,很明显相机没有问题,要想竖着的话可以直接再进入这个扫描页面的时候使用横屏试试

aboutToAppear() {
  window.getLastWindow(this.context).then((win) => {
    win.setPreferredOrientation(window.Orientation.AUTO_ROTATION_LANDSCAPE);
    win.setWindowSystemBarEnable([]);
    win.setWindowLayoutFullScreen(true);
aboutToDisappear() {
  window.getLastWindow(this.context).then((win) => {
    win.setPreferredOrientation(window.Orientation.PORTRAIT);
    win.setWindowSystemBarEnable(['status', 'navigation']);
    win.setWindowLayoutFullScreen(false);

在HarmonyOS Next中,三折叠和二折叠设备拍照预览方向异常,通常与设备传感器方向、屏幕折叠状态及相机API的适配有关。需检查Camera API的getCameraCharacteristics获取设备方向,结合DisplayManager监听折叠状态变化,动态调整预览方向。使用OrientationEventListener监听设备物理方向,并在SurfaceHolder.CallbacksurfaceChanged中调用setDisplayOrientation正确设置。

在HarmonyOS Next中处理多折叠屏(特别是三折叠和二折叠)的相机预览方向问题,需要针对折叠态变化进行适配。以下是关键解决方向:

  1. 获取当前折叠状态
    使用display.getDefaultDisplay()获取屏幕信息,通过foldStatus属性判断设备处于折叠、半折叠还是展开状态。不同折叠态对应不同的屏幕方向逻辑。

  2. 监听折叠状态变化
    注册foldStatusChange事件监听器,在折叠状态变化时动态调整相机预览方向:

    display.on('foldStatusChange', (curFoldStatus: display.FoldStatus) => {
        // 根据curFoldStatus重新计算预览方向
    });
    
  3. 计算预览方向
    根据当前折叠状态和传感器方向,使用window.getLastWindow(this.context).orientation获取窗口方向,结合camera.CameraOutputCapability中的支持方向,动态设置预览方向。

  4. Flutter层适配
    在Flutter的camera插件中,通过Platform Channel将折叠状态传递给Dart层,在Dart中根据折叠状态调整CameraPreview的旋转角度。

  5. 多窗口模式处理
    在多折叠设备分屏场景下,需通过windowClass.WindowavoidAreaChange事件避开折叠区域,并重新计算预览画面比例。

建议在纯血鸿蒙版本中优先使用ArkTS重写相机预览组件,可更精准地通过displaywindow模块控制方向。对于Flutter混合方案,需确保折叠状态能正确跨平台同步。

回到顶部