ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

折叠屏预览满屏但成片被截断:HarmonyOS 7 相机画幅一致性验收

折叠屏预览满屏但成片被截断:HarmonyOS 7 相机画幅一致性验收 折叠屏预览满屏但成片被截断HarmonyOS 7 相机画幅一致性验收先定义什么叫“通过”外屏预览采用方形满屏用户构图时人物完整展开后拍出的 4:3 成片却把头顶截掉。只验收“预览不黑屏”远远不够预览、传感器输出和保存结果必须有可解释的画幅关系。验证边界本文依据文末列出的华为开发者官方页面整理并用可执行的 TypeScript 状态模型检查应用侧分支。当前本机只有 API 24 工具链且没有连接 HarmonyOS 7 真机因此文中的 API 26 接入片段属于按官方资料整理的接入骨架不声称已经完成 API 26 编译、真机性能测试或设备兼容认证。正式上线前必须在目标 API 26 SDK 与真实设备上补齐编译、权限、异常码和性能证据。失效机理先定义业务目标所见即所得、保留完整成片还是允许预览裁切。根据窗口比例、输出 profile 和内容模式算出 contentRect并在预览上展示真实安全区。拍摄结果如果需要二次裁剪必须使用同一目标比例和方向信息不能重新猜。两组对照案例案例一方形外屏拍 1:1 头像传感器输出可能不是 1:1。预览使用 centerCrop同时在 contentRect 中标明最终方形成片保存阶段按同一归一化裁剪框处理。案例二展开内屏拍 16:9 视频窗口接近大屏比例但视频 profile 仍按能力选择。预览采用 fit 或 crop 由产品决定任何黑边和裁切都在录制前可见折叠切换后重新计算安全区。可重复的判定模型type Size{w:number;h:number}; function crop(src:Size,target:number){const rsrc.w/src.h;return rtarget?{w:src.h*target,h:src.h}:{w:src.w,h:src.w/target};} const ccrop({w:4000,h:3000},1);if(c.w!3000||c.h!3000)throw new Error(1:1 裁剪错误);工程选择把 contentRect 作为预览、触摸和保存共同契约可以一次解决构图、点击对焦和成片一致性。简单拉伸到满屏会破坏比例只在保存后裁剪则让用户无法预知结果。验收矩阵验证项通过标准外屏1:1预览安全区与成片一致有可重复步骤、日志或可见结果展开4:3不发生非预期拉伸有可重复步骤、日志或可见结果16:9视频实际 profile 与 UI 文案一致有可重复步骤、日志或可见结果旋转后裁剪框方向更新有可重复步骤、日志或可见结果折叠中拍摄按产品规则禁止或冻结本次配置有可重复步骤、日志或可见结果官方资料与证据边界本文没有给出固定设备输出尺寸。可用 profile、旋转和裁剪 API 应在 API 26 SDK 与目标机型查询示例只验证比例计算。1. Pura X Max 典型适配场景2. HarmonyOS 设备布局基础3. 折叠屏显示模式与状态最后留下一个可复用结论这篇文章不把“接口能调用”当成完成。真正可复用的是先确定输入契约和生命周期再把失败路径写进状态模型平台能力负责提供机制应用负责把机制变成可观察、可回退、可验证的工程链路。下一次遇到同类问题先复现和记录证据再调整实现不靠重复重试掩盖根因。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进