当前位置: 首页 > news >正文

鸿蒙(API 12 Beta6版)图形【 请求动画绘制帧率】方舟2D图形服务

ArkGraphics 2D(方舟2D图形服务 )主要提供图形绘制与显示相关的能力。开发者可以基于一套统一的图形接口进行应用开发,使应用开发更简单、高效。

能力范围

  • 提供图像处理的一些基本能力,包括对当前图像的亮度调节、模糊化、灰度调节、智能取色等。具体可见[@ohos.effectKit (图像效果)]。
  • 提供管理抽象化色域对象的基础能力,包括色域的创建、色域基础属性的获取等。
  • 提供可针对不同形式的内容指定帧率的能力,可用于开发者自绘制内容。
  • 提供高动态显示的相关能力。
  • 提供自绘制的相关能力,开发者可根据需要,自定义绘制实现UI效果,可自定义绘制基础形状、文本、图片等。具体可见[@ohos.graphics.drawing (绘制模块)]。
  • 提供图形绘制与显示相关的Native能力,包括[NativeWindow]、[NativeBuffer]、[NativeImage]、[NativeVsync]、[Drawing]等模块。

使用场景

  • 图像效果处理:开发者可根据不同的UI效果需要,使用[effectKit模块]实现图像的效果处理,以提升用户浏览体验。
  • 设置图像色域:开发者可根据设计需求使用图像文件并设置色域信息,实现图像广色域效果的绘制和显示。
  • 定制帧率场景:支持开发者根据不同内容和需要,定制帧率进行绘制。比如不同游戏场景和界面时,设置不同的帧率,以提升用户体验流畅性并达到平衡功耗的效果。
  • 自绘制场景:开发者可根据不同的UI效果和场景需要,使用Drawing等模块实现除ArkUI组件外的自定义组件或者自定义UI效果的绘制和显示。

亮点特征

  • 同个窗口支持多个帧率:支持为同个窗口的不同内容,比如动画或自绘制UI,定制不同的绘制帧率,不同内容之间独立运行。
  • 支持帧率动态配置,兼顾体验与功耗:支持三方框架根据UI场景,动态请求绘制帧率,比如游戏、视频等业务,兼顾流畅体验与功耗体验
  • 支持录制回放机制,提升交互体验:支持录制命令的缓存,可对绘制指令进行回放,以提升UI绘制的跟手性。
  • 支持多种渲染后端:一次开发,支持多种渲染绘制后端,以降低多端适配成本,并满足应用的差异化需求。

可变帧率简介

随着设备屏幕的不断演进,当前主流设备采用LTPO屏幕,此类屏幕支持在多个档位之间切换屏幕帧率。

对于快速变化的内容,如射击游戏,交互动画等,显示帧率越高,画面越流畅,但是相对的功耗也会越高。

而低速变化的内容,如游戏大厅,时钟更新动画等,画面更新频率较低,使用相对低的显示帧率,用户也不会觉得卡顿,但是相对的功耗就比较低。

基于显示内容的可变帧率能力,在具备LTPO屏幕的设备上,可以达到性能体验和功耗间的平衡。

HarmonyOS支持可变帧率能力,开发者通过使用可变帧率接口,进行相关业务开发,可以享受可变帧率特性带来的功耗收益。

使用场景

可变帧率能力支持开发者自定义应用业务的帧率,其常见的使用场景:

  • 通过配置属性动画/显示动画的帧率属性参数,用于动画的绘制。
  • 通过申请一个独立的绘制帧率,用于UI的绘制。
  • 通过XComponent在Native侧申请独立的绘制帧率,用于游戏等自绘制内容的绘制。
  • 通过NativeVsync在Native侧申请独立的绘制帧率,用于非UI线程的绘制。

运作机制

可变帧率为应用开发中的动画组件、XComponent组件、UI绘制等提供一种基础帧率配置和能力。

开发者通过设置有效的期望绘制帧率后,系统会收集设置的请求帧率,进行决策和分发,在渲染管线上进行分频,尽量能够满足开发者的期望帧率。

在应用开发中,[属性动画]和[显式动画]能够使用可选参数[ExpectedFrameRateRange],为不同的动画配置不同的期望绘制帧率。

请求属性动画的绘制帧率

定义文本组件的属性动画,请求绘制帧率为60,范例如下:

 Text().animation({duration: 1200,iterations: 10,expectedFrameRateRange: { // 设置属性动画的帧率范围expected: 60, // 设置动画的期望帧率为60hzmin: 0, // 设置帧率范围max: 120, // 设置帧率范围},})

请求显式动画的绘制帧率

定义按钮组件的显式动画,请求绘制帧率为30,范例如下:

Button().onClick(() => {animateTo({duration: 1200,iterations: 10,expectedFrameRateRange: { // 设置显式动画的帧率范围expected: 30, // 设置动画的期望帧率为30hzmin: 0, // 设置帧率范围max: 120, // 设置帧率范围},}, () => {})})

完整示例

@Entry
@Component
struct AnimationToAnimationDemo {@State isAnimation: boolean = false;@State translateX1: number = -100;@State translateX2: number = -100;@State translateX3: number = -100;build() {Column() {Row() {Text('30').fontWeight(FontWeight.Bold).fontSize(16).fontColor(Color.White).textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xF56C6C).width(80).height(80).translate({ x: this.translateX1 })}.height('20%')Row() {Text('40').fontWeight(FontWeight.Bold).fontSize(16).fontColor(Color.White).textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0x2E8B57).width(80).height(80).translate({ x: this.translateX2 })}.height('20%')Row() {Text('60').fontWeight(FontWeight.Bold).fontSize(16).fontColor(Color.White).textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0x008B8B).width(80).height(80).translate({ x: this.translateX3 }).animation({duration: 1200,iterations: 10,playMode: PlayMode.AlternateReverse,expectedFrameRateRange: { // 设置属性动画的帧率范围expected: 60, // 设置动画的期望帧率为60hzmin: 0, // 设置帧率范围max: 120, // 设置帧率范围},})}.height('20%')Row() {Button('Start').id('PropertyAnimationStart').fontSize(14).fontWeight(500).margin({ bottom: 10, left: 5 }).fontColor(Color.White).onClick(() => {this.isAnimation = !this.isAnimation;this.translateX3 = this.isAnimation ? 100 : -100;animateTo({duration: 1200,iterations: 10,playMode: PlayMode.AlternateReverse,expectedFrameRateRange: { // 设置显式动画的帧率范围expected: 30, // 设置动画的期望帧率为30hzmin: 0, // 设置帧率范围max: 120, // 设置帧率范围},}, () => {this.translateX1 = this.isAnimation ? 100 : -100;})animateTo({duration: 1200,iterations: 10,playMode: PlayMode.AlternateReverse,expectedFrameRateRange: { // 设置显式动画的帧率范围expected: 40, // 设置动画的期望帧率为40hzmin: 0, // 设置帧率范围max: 120, // 设置帧率范围},}, () => {this.translateX2 = this.isAnimation ? 100 : -100;})}).width('40%').height(40).shadow(ShadowStyle.OUTER_DEFAULT_LG)}.width('100%').justifyContent(FlexAlign.Center).shadow(ShadowStyle.OUTER_DEFAULT_SM).alignItems(VerticalAlign.Bottom).layoutWeight(1)}.width('100%').justifyContent(FlexAlign.Center).shadow(ShadowStyle.OUTER_DEFAULT_SM).layoutWeight(1)}
}

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux开发:优化VSCode C++开发体验
  • 什么酱酒能收藏几十年?快来打造你的私人酒窖宝藏
  • Vue双向绑定
  • 【Linux操作系统】线程的互斥与同步
  • machine learning - 2
  • 【VUE】Vue 组件详解
  • 【SpringBoot】使用Redis
  • 一文搞懂 | Pytorch维度转换操作:view,reshape,permute,flatten函数详解
  • linux中vim常用命令大全
  • 微软RD客户端 手机 平板 远程控制 Windows桌面
  • 【Linux】进程优先级|进程切换
  • 【机器学习-神经网络】循环神经网络
  • GateWay三大案例组件
  • 后端开发刷题 | 最长公共子序列(非连续)
  • 科研绘图系列:R语言PCoA图(PCoA plot)
  • JavaScript-如何实现克隆(clone)函数
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • Babel配置的不完全指南
  • Bootstrap JS插件Alert源码分析
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • isset在php5.6-和php7.0+的一些差异
  • laravel5.5 视图共享数据
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Objective-C 中关联引用的概念
  • PaddlePaddle-GitHub的正确打开姿势
  • React+TypeScript入门
  • Vue2.x学习三:事件处理生命周期钩子
  • vue-router的history模式发布配置
  • vue的全局变量和全局拦截请求器
  • 笨办法学C 练习34:动态数组
  • 对超线程几个不同角度的解释
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 怎样选择前端框架
  • 字符串匹配基础上
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #ifdef 的技巧用法
  • #vue3 实现前端下载excel文件模板功能
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Ruby)Ubuntu12.04安装Rails环境
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)测试工具
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (原创)可支持最大高度的NestedScrollView
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net 7 上传文件踩坑