背景
转眼2024年已经快到五一假期了,最近有空一直在看一些鸿蒙原生开发的文档,ArkUI
声明式开发可以快速构建复杂高效的界面和动画效果。
想着快订票了,不如我们就来做一个纯血鸿蒙
NEXT开发订票页面吧。
掌握技能
本实例虽然只有一个小实例,但是你可以学到一些常用的ArkUI
组件的知识,希望通过笔者的实例教程,带你更深刻的理解这些组件的功能,也带你进入原生鸿蒙开发的奇妙世界。
- Column、Row和Stack布局:通过最常用的三种布局方式,快速学习理解AruUI页面构造;
- DatePicker:日期选择器,实现快速选择指定范围日期的功能;
- animation:属性动画,通过组件的某些通用属性变化,实现渐变过渡的动画效果;
- transition:组件内转场动画,通过配置转场参数,在组件插入和删除时显示渐变过渡的动画效果。
- Button:按钮组件,响应用户的点击等操作。
需求分析
本实例并非用户真实还原购票场景,只是通过简化版的产品流程设计,模拟用户购票流程,简易梳理产品架构图
,如下图所示:
UI设计
通过卡片化的设计,把现实中车票效果与交互界面进行融合,设计订票组件。
通过“输入信息”与“查询结果”两个页面,实现用户订票流程。
本实例并未展示用户层输入“地址”和“交通工具”选择功能,主要目的是带领大家了解ArkUI布局和动画功能,故进行功能精简,按照UI导出切图如下。
开始实例
下面我们打开Deveco Studio
开始本实例的教程,首先新建项目,选择OpenHarmony的Empty Ability创建实例。
本次实例是基于OpenHarmony
SDK的api11(当前官方HarmonyOS仅开放到api9,故采用OpenHarmony演示),
软件名称就命名为“Ticketing”,选择Model为Stage(当前主推Model)
布局分析
层叠布局 (Stack)
页面最底层容器是一个层叠布局 (Stack),由一张背景图和二级内容视图构成。
那么我们了解下第一个知识点Stack
:
层叠布局(Stack)通过区域内元素一层层堆叠实现布局。
子元素在容器中依次入栈,后元素覆盖前元素。
其方便设置相对位置信息,可以很便捷制作卡片效果。
如上图,Stack容器内元素红色矩形位于最上方堆叠在蓝色矩形和绿色矩形之上。
基于UI设计,背景图是固定图片,其宽高也是固定的,我们的Stack容器内是顶部对齐,此时可以通过Stack组件alignContent
参数实现位置的相对对齐。
名称 | 描述 |
---|---|
TopStart | 顶部起始端。 |
Top | 顶部横向居中。 |
TopEnd | 顶部尾端。 |
Start | 起始端纵向居中。 |
Center | 横向和纵向居中。 |
End | 尾端纵向居中。 |
BottomStart | 底部起始端。 |
Bottom | 底部横向居中。 |
BottomEnd | 底部尾端。 |
根据上方表格内容可看出,我们需要为Stack增加顶部横向居中对齐的方式,故alignContent: Alignment.Top
是符合的。
此时代码如下:
1 | ArkUI复制代码@Entry |
垂直线性布局 (Column)
二级容器为三个子元素组成的垂直线性布局 (Column)
那么我们了解下第二个知识点Column
:
垂直线性布局(Column)沿垂直方向布局的容器。
子元素在容器中依次排列。
其方便设置垂直排列信息。
如上图,Column容器内元素蓝色矩形位于最下方,粉色矩形位于最上方。
基于UI设计,由于我们根据UI里面的绝对高度,需要给给不同子容器定义固定的height
,我们的Column容器内是居中对齐,此时可以通过Column组件alignContent
参数的HorizontalAlign属性实现子组件在水平方向上的对齐格式。
名称 | 描述 |
---|---|
Start | 起始端对齐。 |
Center | 居中对齐,默认对齐方式。 |
End | 末端对齐。 |
此时默认值也是HorizontalAlign.Center,故.alignItems(HorizontalAlign.Center)
可以省略。上文Column
部分可以替换为下面代码
1 | ArkUI复制代码Column() { |
至此,我们的布局已经基本完成(DatePick为日期选择器,Button为按钮,我们将在下文详细讲解,暂时只需要知道其实Column内子元素即可),但是很明显Column内的第一个元素Row还是空的,那么接下来我们开始完善该子元素。
水平线性布局 (Row)
垂直线性布局 (Column)内有三个子元素,其中第一个是Row布局的容器,为了实现展示出发地和目的地的功能。
那么我们了解下第三个知识点Row
:
水平线性布局(Column)沿水平方向布局的容器。
子元素在容器中依次排列。
其方便设置横向排列信息。
如上图,Row容器内元素均为水平排列。
基于UI设计,我们的Row容器内也是五个子元素构成,其中包含三个Column容器和两个高度很低的矩形。我们的Row容器内是居中对齐,此时可以通过Row组件alignContent
参数的VerticalAlign属性实现子组件在垂直方向上的对齐格式。
名称 | 描述 |
---|---|
Top | 顶部对齐。 |
Center | 居中对齐,默认对齐方式。 |
Bottom | 底部对齐。 |
和Column类似,此时Row容器默认值也是VerticalAlign.Center,故.alignItems(VerticalAlign.Center)
可以省略。上文Row
部分可以替换为下面代码,其包含五部分组成。
1 | ArkUI复制代码Row() { |
出发地和目的地是都是Column容器的中文和拼音上下组成,上文我们已经学习了Column的使用方式,此时我们可以通过space
实现Column和Row内间距的效果。
1 | scss复制代码 Column({ space: 5 }) { |
如上代码,出发地和目的地容器只是内部文本不同。
1 | scss复制代码Rect() |
横线部分我们通过高度为1的矩形实现。
那么接下来是切换目的地的按钮和火车图标,其位于Row容器正中间,既第三个容器。
分析可知,其也是Column布局,分为上面火车图标和下方切换按钮。
由于我们要实现切换时火车外圆环图标的转动动画,故火车图标部分需要两张图通过Stack堆叠。
1 | ArkUi复制代码//3 |
我们将上面Row内第三个容器修改成如上代码,因为我们已经了解了Stack和Column的用法,故这种嵌套容器的使用和理解,我相信已经没有什么难度了。
此时基本布局效果已经完成~
那么下一章,我们开始实现基本的逻辑,比如点击切换图标可以实现出发地与目的地的修改,日期选择后可以查询选择日期的火车票信息,以及通过按钮点击事件实现用户查询与购票操作。
敬请期待。
本文转载自: 掘金