OpenHarmony 实现屏幕横竖屏

前言

OpenHarmony源码版本:4.0release

开发板:DAYU / rk3568

一、修改“abilities”中的“orientation”实现横竖屏

当我们应用的Alility继承的是UIAbility时,对应的module.json5中的属性是abilities(标识当前Module中UIAbility的配置信息,只对当前UIAbility生效),这时只需要修改其中的orientation属性就行。

unspecified:未指定方向,由系统自动判断显示方向。
landscape:横屏。
portrait:竖屏。
landscape_inverted:反向横屏。
portrait_inverted:反向竖屏。
auto_rotation:随传感器旋转。
auto_rotation_landscape:传感器横屏旋转,包括横屏和反向横屏。
auto_rotation_portrait:传感器竖屏旋转,包括竖屏和反向竖屏。
auto_rotation_restricted:传感器开关打开,方向可随传感器旋转。
auto_rotation_landscape_restricted:传感器开关打开,方向可随传感器旋转为横屏, 包括横屏和反向横屏。
auto_rotation_portrait_restricted:传感器开关打开,方向随可传感器旋转为竖屏, 包括横屏和反向横屏。
locked:传感器开关关闭,方向锁定。

二、Window的setPreferredOrientation()方法实现横竖屏

当我们应用的Ability继承的是ExtensionAbility时,对应的module.json5中的属性是extensionAbilities(标识当前Module中ExtensionAbility的配置信息,只对当前ExtensionAbility生效。),这时你会想会不会像abilities一样也存在orientation属性,但是通过查找发现是不存在的,换成通过setPreferredOrientation方法来实现

首先通过Window.createWindow方法创建窗口获取到Window对象,

然后调用Window.setPreferredOrientation()方法实现横竖屏切换,例:

window.setPreferredOrientation(Window.Orientation.AUTO_ROTATION_LANDSCAPE);
UNSPECIFIED0表示未定义方向模式,由系统判定。
PORTRAIT1表示竖屏显示模式。
LANDSCAPE2表示横屏显示模式。
PORTRAIT_INVERTED3表示反向竖屏显示模式。
LANDSCAPE_INVERTED4表示反向横屏显示模式。
AUTO_ROTATION5表示传感器自动旋转模式。
AUTO_ROTATION_PORTRAIT6表示传感器自动竖向旋转模式。
AUTO_ROTATION_LANDSCAPE7表示传感器自动横向旋转模式。
AUTO_ROTATION_RESTRICTED8表示受开关控制的自动旋转模式。
AUTO_ROTATION_PORTRAIT_RESTRICTED9表示受开关控制的自动竖向旋转模式。
AUTO_ROTATION_LANDSCAPE_RESTRICTED10表述受开关控制的自动横向旋转模式。
LOCKED11表示锁定模式。

三、修改系统源码属性实现横竖屏切换

上面两种方式都是针对某个应用中的Ability的,如果是像面向全部应用一次修改全部生效,只能修改系统中的配置属性了。

修改目录:foundation/window/window_manager/resources/config/rk3568/display_manager_config.xml

修改文件display_manager_config.xml的buildInDefaultOrientation参数值为:2 (Orientation::HORIZONTAL)

UNSPECIFIED(0):未定义,由系统判断

VERTICAL(1):竖屏显示

HORIZONTAL(2):横屏显示

REVERSE_VERTICAL(3):反向竖屏显示

REVERSE_HORIZONTAL(4):反向横屏显示

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
OpenHarmony 的 BufferQueue Lite 是一个轻量级的图形缓冲区管理器,它的实现原理和细节如下: 1. 缓冲区类型 BufferQueue Lite 主要支持两种类型的缓冲区:GraphicBuffer 和 NativeBuffer。其中,GraphicBuffer 是 OpenHarmony 中的图形缓冲区类型,它可以存储图像数据和渲染信息,并支持多种格式和大小;NativeBuffer 是 OpenHarmony 中的原生缓冲区类型,它可以存储任意类型的数据,但不支持图像渲染。 2. 缓冲区池 BufferQueue Lite 维护了一个缓冲区池,用于存储已经分配的缓冲区。当应用程序需要使用缓冲区时,可以从缓冲区池中获取一个可用的缓冲区,如果缓冲区池中没有可用的缓冲区,则需要等待其他应用程序释放缓冲区或者分配新的缓冲区。 3. 线程同步 BufferQueue Lite 使用线程同步机制来保证多个应用程序之间的缓冲区访问安全。当多个应用程序同时访问同一个缓冲区时,BufferQueue Lite 会使用互斥锁或条件变量等线程同步机制来防止数据竞争和死锁等问题。 4. 回调接口 BufferQueue Lite 提供了回调接口,用于通知应用程序缓冲区的状态和数据。应用程序可以通过注册回调函数来接收这些通知,例如缓冲区已经准备好、缓冲区已经切换等。 5. 多进程支持 BufferQueue Lite 支持多进程共享缓冲区,可以实现多个应用程序之间的图像数据共享。为了保证多进程之间的数据安全,BufferQueue Lite 会使用进程间通信机制来同步数据,并使用文件锁等机制来防止数据竞争和死锁等问题。 6. 性能优化 为了提高系统的性能和响应速度,BufferQueue Lite 使用了多种技术来优化性能,例如预分配缓冲区、批量分配缓冲区、内存池管理等。同时,BufferQueue Lite 还支持异步缓冲区操作和快速缓冲区切换等功能,可以进一步提高系统的响应速度和用户体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风起了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值