鸿蒙实战开发-如何使用声明式UI编程框架的基础组件

介绍

在本教程中,我们将通过一个简单的样例,学习如何使用声明式UI编程框架的基础组件。本篇Codelab将会使用Image组件、Slider组件、Text组件共同实现一个可调节的风车动画,实现效果如图所示

相关概念

  • Text组件:文本组件,用于呈现一段信息。
  • Image组件:图片组件,用来渲染展示图片。
  • Slider组件:滑动条组件,用来快速调节设置值,如音量、亮度等。

环境搭建

软件要求

  • DevEco Studio版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:润和RK3568开发板。
  • OpenHarmony系统:3.2 Release。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. 获取OpenHarmony系统版本:标准系统解决方案(二进制)。以3.2 Release版本为例:

2.搭建烧录环境。

  1. 完成DevEco Device Tool的安装
  2. 完成RK3568开发板的烧录

3.搭建开发环境。

  1. 开始前请参考工具准备,完成DevEco Studio的安装和开发环境配置。
  2. 开发环境配置完成后,请参考使用工程向导创建工程(模板选择“Empty Ability”)。
  3. 工程创建完成后,选择使用真机进行调测。

代码结构解读

本篇Codelab只对核心代码进行讲解。

├──entry/src/main/ets             // 代码区      
│  ├──common                        
│  │  └──Constants.ets            // 常量
│  ├──entryability
│  │  └──EntryAbility.ts          // 应用的入口
│  ├──pages
│  │  └──SliderPage.ets           // 入口页面
│  └──view                         
│     └──PanelComponent.ets       // 自定义组件
└──entry/src/main/resources       // 资源文件目录

页面结构

整个程序的页面构造十分简洁,由Image组件构成风车。自定义组件PanelComponent由Text组件和Slider组件构成,用来显示文本和控制图像,效果如图所示:

添加风车

在SliderPage文件中,添加Image组件,给定使用图片的路径,并配置通用属性图形变换中的rotate属性和scale属性。自此,页面中已经有了风车的图像。

// SliderPage.ets
...
  build() {
    Column() {
      Image($rawfile('windmill.png'))
        .objectFit(ImageFit.Contain)
        .height(Constants.IMAGE_SIZE)
        .width(Constants.IMAGE_SIZE)
        .rotate({
          x: RotatePosition.X,
          y: RotatePosition.Y,
          z: RotatePosition.Z,
          angle: this.angle
        })
        .scale({ x: this.imageSize, y: this.imageSize })
        ...
    }
    .justifyContent(FlexAlign.End)
    .height(Constants.PERCENTAGE_100)
    .backgroundColor($r('app.color.background_color'))
  }
...

效果如图所示:

如何让风车动起来

在speedChange()函数中,以固定的时间间隔调整rotate的角度,也就是参数angle。onPageShow是SliderPage页面的生命周期方法,在其中调用speedChange()函数,表示从程序启动时,便开始执行。自此我们已经实现了风车的旋转效果。代码如下:

// SliderPage.ets
...
  speedChange(): void {
    this.angle = Constants.ANGLE;
    this.interval = setInterval(() => {
      this.angle += this.speed;
    }, Constants.DELAY_TIME)
  }

  onPageShow(): void {
    clearInterval(this.interval);
    this.speedChange();
  }
...

调节风车的转速

在PanelComponent的构造参数中,给定调节转速的初始值和样式。在callback事件中,将子组件Slider滑动的value给到事先定义好的变量speed,实现Text组件的更新,并且通过调用speedChange()方法实现转速的改变。代码如下:

// SliderPage.ets
...
PanelComponent({
  mode: SliderMode.SPEED,
  title: $r('app.string.speed_text'),
  text: this.speed.toFixed(Constants.FRACTION_DIGITS),
  callback: ((value: number, mode: SliderChangeMode) => {
    this.speed = value;
    clearInterval(this.interval);
    this.speedChange();
  }),
  options: {
    value: this.speed,
    min: SliderSpeed.MIN,
    max: SliderSpeed.MAX,
    step: SliderSpeed.STEP,
    style: SliderStyle.InSet
  }
})
...

调节风车的大小

在PanelComponent的构造参数中,给定调节大小的初始值和样式。在callback事件中,将子组件Slider滑动的value给到事先定义好的变量imageSize,实现Text组件的更新和调节风车大小。代码如下:

// SliderPage.ets
...
PanelComponent({
  mode: SliderMode.SCALE,
  title: $r('app.string.scale_text'),
  text: this.imageSize.toFixed(Constants.FRACTION_DIGITS),
  callback: ((value: number, mode: SliderChangeMode) => {
    this.imageSize = value;
  }),
  options: {
    value: this.imageSize,
    min: SliderScale.MIN,
    max: SliderScale.MAX,
    step: SliderScale.STEP,
    style: SliderStyle.InSet
  }
})
.margin({
  bottom: Constants.PANEL_MARGIN_BOTTOM,
  top: Constants.PANEL_MARGIN_TOP
});
...

总结

您已经完成了本次Codelab的学习,并了解到以下知识点:

  1. Slider组件的使用。
  2. Image组件的使用。
  3. Text组件的使用。
  4. 通用属性rotate和scale属性的使用。

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《HarmonyOS教学视频

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书方式请点击→《鸿蒙生态应用开发白皮书V2.0PDF》

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?《做鸿蒙应用开发到底学习些啥?》

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/505792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

回收站删除以后还能撤销吗 回收站删除以后怎么找回 回收站清空了怎么恢复 easyrecovery数据恢复软件

回收站删除以后能撤销吗?有不少网友前一秒清空回收站,后一秒就开始在网上疯狂搜寻如何撤销删除回收站的办法。实际上,清空回收站并不可怕,被删除的数据仍然保存在我们的电脑硬盘中。今天我为大家介绍回收站删除以后怎么找回数据的…

数据可视化-Python

师从黑马程序员 Json的应用 Json的概念 Json的作用 Json格式数据转化 Python数据和Json数据的相互转化 注:把字典列表变为字符串用dumps,把字符串还原回字典或列表用loads import json#准备列表,列表内每一个元素都是字典,将其转化为Json …

HTTPS传输过程

HTTPS:超文本传输安全协议 相较于HTTP明文传输,HTTPS增加了SSL/TLS进行了加密增加了通信的安全性。 SSL和TLS是两个不同的加密方法,SSL是TLS的前身,现在绝大多数浏览器使用的是TLS,所以着重了解以下TLS的概念即可。 首…

算法——滑动窗口,按位或

先看最简单的:删除有序数组中的重复项 . - 力扣(LeetCode) 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该…

编曲知识11:吉他扫弦织体编写 基础贝斯编写 采样、小打编写

吉他扫弦织体编写 基础贝斯编写 采样、小打编写小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65f033afe4b092c16848e512?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 吉他编写(二) 扫弦木吉他 扫弦模式开关:先点击点击红色箭…

你知道Linux线程池的重要性吗?带你手撕线程池

⭐小白苦学IT的博客主页 ⭐初学者必看:Linux操作系统入门 ⭐代码仓库:线程池实现源码 ❤关注我一起讨论和学习Linux系统 1.前言 你了解过Linux线程池吗?不了解?没有关系,先来带你了解一下我们的池化技术,以…

【练习】滑动窗口思想

🎥 个人主页:Dikz12🔥个人专栏:Java算法📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 1.长度最小的子数组 题目解析 讲解 代码实现 2.无…

AI绘画教程:Midjourney使用方法与技巧从入门到精通

文章目录 一、《AI绘画教程:Midjourney使用方法与技巧从入门到精通》二、内容介绍三、作者介绍🌤️粉丝福利 一、《AI绘画教程:Midjourney使用方法与技巧从入门到精通》 一本书读懂Midjourney绘画,让创意更简单,让设计…

编曲知识12:了解弦乐 四部和声 弦乐群奏写作 编组、文件夹轨应用

认识弦乐 认识提琴 String:弦乐 Basse:倍大提琴 Cello:大提琴 Viola:中提琴 Violin:小提琴 音源介绍(一) LA Scoring Strings 简称:Lass/拉丝弦乐 Basses:倍大提琴组 Cellos:大提琴组 LASS Ensemble Patches:大齐奏 Violas:中提琴组 ViolinsⅠ:小提琴一组 Violin…

数字乡村发展蓝图:科技赋能农村实现全面振兴

目录 一、数字乡村发展蓝图的内涵与目标 二、科技赋能农村:数字乡村发展的动力与路径 (一)加强农业科技创新,提升农业生产效率 (二)推进农村电商发展,拓宽农民增收渠道 (三&…

【C++】C++11的新特性

目录 一. 列表初始化1. 列表初始化的原理: initializer_list 二. 类型的声明1. auto2. decltype 三. nullptr四. 范围 for五. STL容器变化六. 类的新功能 一. 列表初始化 在 C 语言中, 就可以使用 {} 对数组或结构体进行初始化, 而 C11 扩大了 {} 的使用范围, 使其可以初始化所…

探索http-vue-loader的奥秘:原理、使用方法、在Vue开发中的应用

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

《深度学习入门之PyTorch》书籍阅读笔记

《深度学习入门之PyTorch》书籍阅读笔记 ISBN 978-7-121-32620-2 多层全连接神经网络 Pytorch基础 Tensor张量 是一个多维矩阵,pytorch的tensor可以和numpy的ndarray相互转换,但numpy的ndarray只能在CPU上运行。不同数据类型的Tensor,t…

2024 年高效开发的 React 生态系统

要使用 React 制作应用程序,需要熟悉正确的库来添加您需要的功能。例如,要添加某个功能(例如身份验证或样式),您需要找到一个好的第三方库来处理它。 在这份综合指南中,我将向您展示我建议您在 2024 年使用…

多协议支持 API 调测客户端:Postman 的强力替代品 | 开源日报 No.210

Kong/insomnia Stars: 32.6k License: Apache-2.0 insomnia 是一个开源的、跨平台的 API 客户端,支持 GraphQL、REST、WebSockets、SSE 和 gRPC 协议,并提供云存储、本地存储和 Git 存储。 调试各种流行协议和格式的 API。使用原生 OpenAPI 编辑器设计…

计算机网络-HTTP相关知识(一)

HTTP基础 基本概念:HTTP是一种计算机之间交流通信的规范,它允许数据在两点之间传输,这个过程可以包括中转或接力。HTTP不仅仅包括文本,还可以包括图片、音频等超文本。状态码:HTTP状态码分为五类: 2xx&…

11-SpringSecurity:Session共享,菜鸟驿站java面试题

pom依赖 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-data-redis org.springframework.session spring-session-data-redis org.projectlombok lombok …

蓝桥杯第十五届抱佛脚(八)并查集

蓝桥杯第十五届抱佛脚(八)并查集 基本概念 并查集是一种数据结构,用于管理一系列不交集的元素集合,并支持两种操作: 查找(Find): 查找操作用于确定某个元素属于哪个集合&#xf…

Java基础学习: JDK动态代理

文章目录 一、什么是JDK动态代理二、JDK动态代理的特点三、JDK动态代理类如何使用四、JDK动态代理原理分析1、创建代理对象2、生成代理类 一、什么是JDK动态代理 JDK动态代理是Java提供的一种动态生成代理类和代理对象的技术。它主要利用Java的反射机制实现,在运行…

Lucene及概念介绍

Lucene及概念介绍 基础概念倒排索引索引合并分析查询语句的构成 基础概念 Document:我们一次查询或更新的载体,对比于实体类 Field:字段,是key-value格式的数据,对比实体类的字段 Item:一个单词&#xff0…