OpenHarmony如何切换横竖屏?

Android 相机预览方向和拍照方向 我们知道手机 Camera 的图像数据都是来自于摄像头硬件的图像传感器(Image Sensor),这个 Sensor 被固定到手机之后是有一个默认的取景方向的,这个方向如下图所示,坐标原点位于手机横放时的左上角: Camera 预览方向 由于手机屏幕可以 360 度旋转,为了保证用户无论怎么旋转手机都能看到“正确”的预览画面。Android 系统底层根据当前手机屏幕的方向对图像 Sensor 采集到的数据进行了旋转处理后才传输给显示系统。因此,你在打开 Camera 应用后,无论怎么旋转手机都 阅读详情

前言

在日常开发中,大多APP可能根据实际情况直接将APP的界面方向固定,或竖屏或横屏。但在使用过程中,我们还是会遇到横竖屏切换的功能需求,可能是通过物理重力感应触发,也有可能是用户手动触发。所以本文主要带大家了解在OpenAtom OpenHarmony(以下简称“OpenHarmony”)应用开发的过程中,如何在Stage模型和FA模型下使用对应的接口去完成横竖屏的切换。

本文中OpenHarmony版本为3.2 Beta4,API版本为9。开发板为DAYU200。

FA模型

FA模型下,setDisplayOrientation和setDisplayOrientation是切换横竖屏的接口。

文档:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-inner-app-context.md#contextsetdisplayorientation7

context.setDisplayOrientation

setDisplayOrientation(orientation:bundle.DisplayOrientation, callback: AsyncCallback<void>): void

设置当前能力的显示方向(callback形式)。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

参数:

示例:

import featureAbility from '@ohos.ability.featureAbility';import bundle from '@ohos.bundle';//FA模型下获取contextvar context = featureAbility.getContext();var orientation = bundle.DisplayOrientation.UNSPECIFIED;context.setDisplayOrientation(orientation, (err) => {    console.info("setDisplayOrientation err: " + JSON.stringify(err));});

完整代码

import bundle from '@ohos.bundle';import featureAbility from '@ohos.ability.featureAbility';@Entry@Componentstruct Index {  @State message: string = '横竖屏切换 '  @State portrait: boolean = true  build() {    Row() {      Column() {        Text(this.message)          .fontSize(30)          .fontWeight(FontWeight.Bold).onClick(() => {          var context = featureAbility.getContext();          if (this.portrait) {            // 横屏            var orientation = bundle.DisplayOrientation.LANDSCAPE;            context.setDisplayOrientation(orientation, (err) => {              this.portrait = !this.portrait              console.info("setDisplayOrientation err: " + JSON.stringify(err));            });          } else {            //竖屏            var orientation = bundle.DisplayOrientation.PORTRAIT;            context.setDisplayOrientation(orientation, (err) => {              this.portrait = !this.portrait              console.info("setDisplayOrientation err: " + JSON.stringify(err));            });                }        })      }      .width('100%')    }    .height('100%')  }}

Stage模型

从API 9开始,可以使用setPreferredOrientation来切换横竖屏。

文档:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md#setpreferredorientation9

在Stage模型中,使用到的主要是Window(窗口)。在设置横竖屏切换的时候,需要先使用getLastWindow()、createWindow()、findWindow()中的任一方法获取到Window实例,再通过此实例调用对应的方法,本文使用的是getLastWindow。

Window.getLastWindow

getLastWindow(ctx: BaseContext): Promise<Window>

获取当前应用内最后显示的窗口,使用Promise异步回调。

系统能力:SystemCapability.WindowManager.WindowManager.Core

参数:

返回值:

错误码:以下错误码的详细介绍请参见窗口错误码。

let windowClass = null;try {    let promise = window.getLastWindow(this.context);    promise.then((data)=> {        windowClass = data;        console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));    }).catch((err)=>{        console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));    });} catch (exception) {    console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(exception));}

然后就可以使用setPreferredOrientation属性。

setPreferredOrientation

setPreferredOrientation(orientation: Orientation): Promise<void>

设置窗口的显示方向属性,使用Promise异步回调。

系统能力:SystemCapability.WindowManager.WindowManager.Core

参数:

返回值:

错误码:以下错误码的详细介绍请参见窗口错误码。

let orientation = window.Orientation.AUTO_ROTATION;try {    let promise = windowClass.setPreferredOrientation(orientation);    promise.then(()=> {        console.info('Succeeded in setting the window orientation.');    }).catch((err)=>{        console.error('Failed to set the window orientation. Cause: ' + JSON.stringify(err));    });} catch (exception) {    console.error('Failed to set window orientation. Cause: ' + JSON.stringify(exception));}

完整代码

import Window from '@ohos.window'import common from '@ohos.app.ability.common';@Entry@Componentstruct ArkUIClubTest {  private portrait: boolean = true  build() {    Stack() {      Button("横竖屏切换")        .onClick(() => {          this.changeOrientation()        })    }    .width('100%')    .height('100%')  }  private changeOrientation() {    let windowClass = null;    //获取上下文    //var context = getContext(this) as any    // 获取上下文,使用common模块     var context =   getContext(this) as common.UIAbilityContext;    let promise = Window.getLastWindow(context);    promise.then((data) => {      windowClass = data;      if (this.portrait) {        //切换成横屏        let orientation = Window.Orientation.LANDSCAPE;        windowClass.setPreferredOrientation(orientation, (err) => {       });        this.portrait = !this.portrait        console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));      }      else {        //切换成竖屏        let orientation = Window.Orientation.PORTRAIT;        windowClass.setPreferredOrientation(orientation, (err) => {        });        this.portrait = !this.portrait        console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));      }    }).catch((err) => {      console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));    });  }}

总结

本文带大家使用对应的接口,在Stage模型和FA模型下完成了横竖屏的切换。其中还涉及到了上下文的获取:Stage模型用(getContext(this) as any),FA模型(featureAbility.getContext()),大家可以在此基础上利用生命周期的回调,在合适的地方完成对应的操作。

Android Camera旋转角度总结 开发过Android自定义相机的朋友们估计都被相机的各种乱七八糟的旋转角度适配坑过,本文将对Camera的各种角度进行解析。 一、适配目标 根据相机旋转角度以及屏幕显示旋转角度选择相机预览数据显示到View上的预览数据显示旋转角度,使眼睛直接看到的真实画面和手机屏幕中显示的画面效果相同。 **相机旋转角度:**相机成像相对于手机的旋转角度,若设备已经安装上了相机,那么该相机相对于设备的旋转角度... 阅读详情

相关推荐

OpenHarmony实战——切换横竖屏

在日常开发中,大多APP可能根据实际情况直接将APP的界面方向固定,或竖屏或横屏。但在使用过程中,我们还是会遇到横竖屏切换的功能需求,可能是通过物理重力感应触发,也有可能是用户手动触发。所以本文主要带大家了解在OpenAtom OpenHarmony(以下简称“OpenHarmony”)应用开发的过程中,如何在Stage模型和FA模型下使用对应的接口去完成横竖屏的切换。本文中OpenHarmony版本为3.2 Beta4,API版本为9。开发板为DAYU200。

xianglizaibie的博客 1008

OpenHarmony 实现屏幕横竖屏

OpenHarmony 实现屏幕横竖屏

Abner_Crazy的博客 4287

OpenHarmony实战开发-如何实现横竖屏切换

横竖屏切换是音视频应用常用的功能,OpenHarmony也提供了相应的能力,可以方便的实现横竖屏切换,本文即为大家介绍如何完成横竖屏切换。

2401_82546228的博客 1446

android中Camera setDisplayOrientation使用

在写相机相关应用的时候遇到捕获的画面方向和手机的方向不一致的问题,比如手机是竖着拿的,但是画面是横的,这是由于摄像头默认捕获的画面byte[]是根据横向来的,而你的应用是竖向的,解决办法是调用setDisplayOrientation来设置PreviewDisplay的方向,效果就是将捕获的画面旋转多少度显示。 设置 preview 的顺时针旋转角度。这将影响 preview frames和拍照

mengzhengjie的专栏 1942

【鸿蒙南向开发】OpenHarmony如何切换横竖屏?

本文带大家使用对应的接口,在Stage模型和FA模型下完成了横竖屏的切换。其中还涉及到了上下文的获取:Stage模型用(getContext(this) as any),FA模型(featureAbility.getContext()),大家可以在此基础上利用生命周期的回调,在合适的地方完成对应的操作。

HarmonyOS_666的博客 1248

开源鸿蒙横竖屏切换

系统自动旋转开关仅对第三方应用生效,桌面 Launcher 无法跟随传感器旋转;强制横屏后桌面图标、控件布局错乱,显示比例异常;屏幕方向设置为临时状态,设备重启后自动恢复默认竖屏,无法持久化;官方窗口 API 仅支持应用级旋转,不满足整机全局旋转需求。本文通过修改系统 Launcher 窗口属性、优化 UI 加载逻辑、增加系统属性持久化配置,实现完整的全局横竖屏切换能力。修改后旋转不生效检查Launcher应用是否成功替换确认 Launcher 重启逻辑执行成功系统属性不生效。

weixin_56488988的博客 403

OpenHarmony版本的APP如何切换横竖屏?

在日常开发中,大多APP可能根据实际情况直接将APP的界面方向固定,或竖屏或横屏。但在使用过程中,我们还是会遇到横竖屏切换的功能需求,可能是通过物理重力感应触发,也有可能是用户手动触发。所以本文主要带大家了解在OpenAtom OpenHarmony(以下简称“OpenHarmony”)应用开发的过程中,如何在Stage模型和FA模型下使用对应的接口去完成横竖屏的切换。本文中OpenHarmony版本为3.2 Beta4,API版本为9。开发板为DAYU200。

adaedwa187545的博客 1063

BioEmu:微软黑科技炸场!生成式AI重构蛋白质模拟:千倍效率碾压传统计算,新药研发周期砍半

BioEmu 是微软推出的生成式深度学习系统,可在单个 GPU 上每小时生成数千种蛋白质结构样本,支持模拟动态变化、预测热力学性质,并显著降低计算成本。

士多啤梨先生の博客 1097

OpenHarmony南向开发:如何切换横竖屏?

本文主要带大家了解在OpenAtom OpenHarmony(以下简称“OpenHarmony”)应用开发的过程中,如何在Stage模型和FA模型下使用对应的接口去完成横竖屏的切换。

qq_39652397的博客 1378

手把手教你用Simulink给C2000配置SCI串口发送数据(附模型与避坑点)

本文详细介绍了如何使用Simulink为C2000系列微控制器配置SCI串口发送数据,包括硬件资源分配、模型搭建、参数设置及调试技巧。通过代码生成和串口通信实践,帮助开发者高效实现嵌入式系统开发,避免常见通信问题。

weixin_30831529的博客 294

W5500 MACRAW模式实战:在ESP32上抓取并解析原始以太网数据包

本文详细介绍了如何在ESP32开发板上使用W5500芯片的MACRAW模式捕获和解析原始以太网数据包。通过硬件连接指南、代码实现示例和协议解析技巧,帮助开发者深入理解网络通信底层机制,实现网络嗅探和自定义协议开发等高级应用。

weixin_42520573的博客 417

React Native for OpenHarmony 实战:横竖屏切换处理

横竖屏切换是指移动设备根据物理方向变化或用户操作,自动或手动调整屏幕显示方向的功能。在技术层面,这涉及到窗口尺寸变化、布局重排、资源加载等多个环节。窗口尺寸变化:屏幕宽度和高度值互换,影响布局计算方向状态变化:应用需要感知当前是横向还是纵向模式使用内置的DimensionsAPI监听窗口尺寸变化通过第三方库(如)获取更精确的方向信息。

2501_91746149的博客 804

ROS2前置基础教程 | 使用CMakeLists.txt编译ROS2节点

答案是有的,那就是cmake工具。cmake通过调用CMakeLists.txt直接生成Makefile。 2.新建CMakeLists.txt 在新建,输入下面内容。 3.编译代码 我们一般会创建一个新的目录,运行cmake并进行编译,这样的好处是不会显得那么乱。 创建好文件夹,接着运行cmake指令,代表到上级目录找。 运行完cmake你应该可以在build目录下看到cmake自动生成的Makefile了,接着就可以运行make指令进行编译 运行完上面的指令,就可以在build目录下发现节点了。ROS2

生活不止眼前的苟且 1万+

OrientationBuilder横竖屏切换 Flutter & OpenHarmony

本文介绍了使用Flutter的OrientationBuilder组件实现设备横竖屏布局适配的方法。通过监听设备方向变化,可以动态调整布局结构:竖屏采用上下排列,横屏改为左右排列。核心实现是利用Flex组件结合方向参数动态设置主轴方向,配合Expanded实现区域等分。该方案适用于视频播放、图表展示等需要响应屏幕旋转的场景,能有效提升跨设备用户体验。文章还分析了横竖屏适配的必要性、设计差异及常见策略,强调这是提升应用可用性的基本要求。

weixin_44727882的博客 779

VOF模型求解方法:从SIMPLEC到PISO的稳定性优化策略

本文深入探讨了VOF模型求解方法中SIMPLEC与PISO算法的稳定性优化策略,重点分析了两种算法在稳态和瞬态问题中的应用差异。通过对比PRESTO离散化方法与其他格式的优劣,提供了针对多相流模拟的实用设置建议和稳定性优化技巧,帮助工程师有效提升计算效率和精度。

yellow的专栏 1153

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

算法大师! 790

Openharmony 下载到rk3568实现横屏

Openharmony 下载到rk3568实现横屏

lx3022949056的博客 889

用 MATLAB 实现鼻子和嘴的检测

为了方便起见,这里我们使用了 CascadeObjectDetector 中自带的 haarcascade_frontalface_alt2.xml 文件,该文件包含了多个包含鼻子和嘴的样本图像。其中 bbox 变量表示检测到的所有鼻子和嘴的边界框信息。在图像处理中,鼻子和嘴的检测是十分重要的一项任务。本文将介绍如何使用 MATLAB 实现鼻子和嘴的检测,并提供相应的源代码。然后,我们可以调用之前创建的 detector 对象来进行鼻子和嘴的检测。综上所述,我们可以使用以上代码实现鼻子和嘴的检测。

qq_39605374的博客 256

OpenHarmony系统解决方案 - 配置屏幕方向导致开机动画和Launcher显示异常

配置设备默认方向,例如修改为横屏显示,修改文件display_manager_config.xml的buildInDefaultOrientation参数值为2(Orientation::HORIZONTAL),系统启动后开机动画横竖屏切换,Launcher显示异常。

TiZizzz 2269

ICM20948 DMP代码详解(69)

ICM20948 DMP代码详解(69)

phmatthaus的专栏 614

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

鸿蒙5.0开发常见问题【如何进行页面横竖屏切换?】

设置方法:setPreferredOrientation(orientation: Orientation, callback: AsyncCallback<void>): void。Orientation取值为AUTO_ROTATION,表示传感器自动旋转模式。

鸿蒙的技术博客 576

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Flutter for OpenHarmony:响应式布局(LayoutBuilder / MediaQuery)—— 构建真正自适应的鸿蒙应用

Flutter响应式布局助力OpenHarmony应用全场景适配 摘要:本文探讨Flutter在OpenHarmony多设备生态中的响应式布局解决方案。针对手机、平板、智慧屏等不同尺寸设备,深入解析MediaQuery和LayoutBuilder两大核心工具的使用场景与差异:MediaQuery获取全局设备信息(如屏幕尺寸、横竖屏状态),LayoutBuilder则感知局部可用空间。通过新闻详情页横竖屏适配、基于宽度断点的多设备布局策略等实战案例,演示如何构建自适应UI。特别针对OpenHarmony设备多

2501_93573368的博客 1133

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 带你玩转OpenHarmony AI-基于海思NNIE的AI能力自定义
下一篇: OpenHarmony社区运营报告(2022年12月)
OpenHarmony开发者
博客等级 码龄5年 625粉丝 221原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值