赞
踩
在本教程中,我们将通过一个简单的样例,学习如何使用声明式UI编程框架的基础组件。本篇Codelab将会使用Image组件、Slider组件、Text组件共同实现一个可调节的风车动画,实现效果如图所示
完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:
2.搭建烧录环境。
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的学习,并了解到以下知识点:
为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《HarmonyOS教学视频》
获取完整版白皮书方式请点击→《鸿蒙生态应用开发白皮书V2.0PDF》
一、入门必看
二、HarmonyOS 概念
更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。