【HarmonyOS应用开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】
目录
😋环境配置:华为HarmonyOS开发者
📺演示效果:
📖实验步骤及方法:
一、在media文件夹中添加想要使用的图片素材
二、在entry/src/main/ets/page目录下创建Welcome.ets文件
1. 整体结构与组件声明
2. 状态变量声明
3. 页面显示(onPageShow)方法
4. 视图构建部分(build )方法
(1)扫描渐变(sweepGradient)效果
5.其他内容部分
(1)空白元素(Blank)
(2)文本元素(Text)
(3)图像元素(Image)
👋实验小结
😋环境配置:华为HarmonyOS开发者
🎯学习小目标:实现如下的欢迎界面(应用启动加载页)
📺演示效果:
📖实验步骤及方法:
一、在media文件夹中添加想要使用的图片素材
二、在entry/src/main/ets/page目录下创建Welcome.ets文件
界面的实现代码如下:
@Entry @Component @Preview struct Welcome{@State opacityValue: number = 0.3;onPageShow(): void {this.opacityValue = 1}build() {Column(){Blank()Blank()Column(){Text('奇怪的知识').fontColor(Color.Gray).fontSize(36).fontWeight(FontWeight.Bold)}.alignItems(HorizontalAlign.Start).opacity(this.opacityValue).alignItems(HorizontalAlign.Start).opacity(this.opacityValue).animation({duration:2000,iterations:1,onFinish: ()=>{}})Blank()Column() {Image($r('app.media.smartCat')).width(200)}.alignItems(HorizontalAlign.Start).opacity(this.opacityValue).alignItems(HorizontalAlign.Start).opacity(this.opacityValue).animation({duration:2000,iterations:1,onFinish: ()=>{}})Blank()Column() {Text('增加了!').fontColor(Color.White).fontSize(36).fontWeight(FontWeight.Bold)}.alignItems(HorizontalAlign.Start).opacity(this.opacityValue).alignItems(HorizontalAlign.Start).opacity(this.opacityValue).animation({duration:1500,iterations:10,onFinish: ()=>{}})Blank()Blank()Blank()Column() {Image($r('app.media.RossyYan')).width(200).opacity(0.15)}}.width('100%').height('100%').sweepGradient({center: [180,327],start: 0,end: 359,rotation: 45, // 旋转角度repeating: true, // 渐变颜色是否重复colors: [[0x0E0B0B, 0.0], [0x81817D, 0.3], [0x020202, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果})} }
以下是对这段代码的详细讲解:
1. 整体结构与组件声明
@Entry
、@Component
、@Preview
注解(装饰器):
@Entry
通常用于标识这个组件是整个应用程序的入口组件,意味着程序启动时可能会首先展示这个组件所定义的界面内容。@Component
表明这是一个可复用的组件,它可以被组合到其他更复杂的界面结构中,符合组件化开发的理念。@Preview
往往用于在开发工具中提供组件的预览功能,方便开发者快速查看组件呈现的样子,而无需完整启动整个应用程序。
Welcome
结构体:定义了一个名为Welcome
的结构体,它代表了整个界面组件的逻辑和视图结构。2. 状态变量声明
@State opacityValue: number = 0.3;
- 这里使用
@State
装饰器声明了一个名为opacityValue
的状态变量,类型为数字(number
),初始值被设置为0.3
。在响应式编程框架中,状态变量的变化会触发界面的重新渲染,以便更新相应的显示效果,比如这里会影响后续一些视图元素的透明度相关表现。3. 页面显示(
onPageShow
)方法onPageShow(): void {this.opacityValue = 1 }
- 定义了
onPageShow
方法,它很可能是在页面显示(比如初次加载、从后台切换到前台等触发页面可见的情况)时被调用的回调函数。在这个函数中,将opacityValue
的值修改为1
,这意味着页面显示时会改变相关元素的透明度情况(后续使用该变量控制透明度的视图元素会有相应变化)。4. 视图构建部分(
build
)方法build() {Column(){// 内部视图元素}.width('100%').height('100%').sweepGradient({// 渐变相关配置}) }
build
方法用于构建组件的视图层级结构。整体上是一个垂直方向排列的Column
(列)布局,占据父容器的100%
宽度和100%
高度(通过.width('100%').height('100%')
设置)。(1)扫描渐变(
sweepGradient
)效果
设置了一个扫描渐变(
sweepGradient
)效果,相关配置如下:
center
:指定了渐变的中心坐标为[180, 327]
,决定了渐变的起始位置参照点。start
和end
:分别定义了渐变的起始角度(0
)和结束角度(359
),意味着渐变会绕着中心旋转一圈覆盖整个范围。rotation
:设置了额外的旋转角度为45
度,进一步调整渐变的呈现效果。repeating
:设置为true
,表明渐变颜色会重复显示,营造出一种循环的渐变效果。colors
:定义了渐变的颜色数组,包含了三个颜色元素,每个元素是一个包含颜色值(十六进制表示,如0x0E0B0B
等)和占比(如0.0
、0.3
、0.5
)的数组,末尾元素占比小于1
时满足重复着色效果,从而实现渐变的色彩过渡和循环效果。5.其他内容部分
(1)空白元素(
Blank
)多次出现了
Blank()
,从名字推测可能是用于占位、增加间距等作用的空白视图,不过具体功能还得看对应框架中Blank
组件的实际定义。(2)文本元素(
Text
)Text('奇怪的知识').fontColor(Color.Gray).fontSize(36).fontWeight(FontWeight.Bold)
这是一个显示文本的视图,文本内容为 “奇怪的知识”,设置了字体颜色为灰色(
Color.Gray
),字体大小为36
,字体加粗(FontWeight.Bold
),并且其透明度受opacityValue
状态变量控制,同时还添加了一个动画效果,动画相关配置如下:.animation({duration:2000,iterations:1,onFinish: ()=>{} })
意味着这个文本元素在显示时有一个时长为
2000
毫秒(2
秒)的动画过程,动画仅执行一次(iterations: 1
),当动画结束时执行onFinish
回调函数(这里函数体为空,可能根据实际需求补充相应逻辑)。类似的还有另外两个文本元素:
Text('增加了!').fontColor(Color.White).fontSize(36).fontWeight(FontWeight.Bold)
这个文本显示 “增加了!”,字体颜色为白色,字体大小等设置与之前类似,不过动画配置有所不同,时长为
1500
毫秒(1.5
秒),且会重复执行10
次(iterations: 10
)。(3)图像元素(
Image
)有两处使用了
Image
来显示图片:Image($r('app.media.smartCat')).width(200)
这是加载一张图片(通过
$r('app.media.smartCat')
这种资源引用方式,具体取决于对应框架的资源管理机制),并设置图片宽度为200
单位(具体单位也看框架默认设置,可能是像素等),其透明度同样受opacityValue
状态变量控制,也有一个时长2000
毫秒、执行一次的动画效果。还有:
Image($r('app.media.RossyYan')).width(200).opacity(0.15)
加载另一张图片(
$r('app.media.RossyYan')
),宽度设置为200
,并且初始透明度被设置为0.15
,不过这里没有看到额外的动画效果添加到这个特定的图片元素上(与前面带动画的元素对比而言)。
👋实验小结
在本次对 Welcome 组件的探索过程中,虽略有收获,但深知仍有漫漫长路要走。
从代码架构层面而言,@Entry 指明入口、@Component 助力复用、@Preview 便于预览,只是初窥门径,为开发流程带来些许便利。@State 变量操控元素透明度,在页面加载时有了初步动态呈现,尚不算精巧。Column 布局结合渐变背景,安置文本、图像,勉强构建出可用界面。动画增添几分生气,可提升空间巨大。尤其动画回调与 Blank 组件,细节粗糙,后续定当潜心钻研,力求精进。
相关文章:

【HarmonyOS应用开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】
目录 😋环境配置:华为HarmonyOS开发者 📺演示效果: 📖实验步骤及方法: 一、在media文件夹中添加想要使用的图片素材 二、在entry/src/main/ets/page目录下创建Welcome.ets文件 1. 整体结构与组件声…...

【MySQL】:Linux 环境下 MySQL 使用全攻略
📃个人主页:island1314 🔥个人专栏:MySQL学习 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 1. 背景 🚀 世界上主…...

Linux驱动开发 gpio_get_value读取输出io的电平返回值一直为0的问题
当时gpio子系统进行读取时返回必定是0 因此,首先必须使用platform驱动来管理gpio和pinctrl子系统,然后如果按照正点原子所教的设备树引脚设置为0x10B0则会导致读取到的电平值为0。 解决方法: 将设备树中的引脚设置为 pinctrl_gpioled: gpio…...

【数据结构】栈与队列(FIFO)
在阅读该篇文章之前,可以先了解一下堆栈寄存器和栈帧的运作原理:<【操作系统】堆栈寄存器sp详解以及栈帧>。 栈(FILO) 特性: 栈区的存储遵循着先进后出的原则。 例子: 枪的弹夹,最先装进去的子弹最后射出来,最后装入的子弹…...
vue.js -ref和$refs获取dom和组件
在Vue.js中,ref和$refs是两个常用的属性,用于访问DOM元素和组件实例。下面分别详细解析这两个属性,并提供代码实例。 ref属性 ref属性用于给DOM元素或组件指定一个唯一的引用标识,在Vue实例中可以通过这个标识来访问对应的DOM元素…...

unity学习5:创建一个自己的3D项目
目录 1 在unity里创建1个3D项目 1.1 关于选择universal 3d,built-in render pipeline的区别 1.2 创建1个universal 3d项目 2 打开3D项目 2.1 准备操作面板:操作界面 layout,可以随意更换 2.2 先收集资源:打开 window的 AssetStore 下载…...

IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案
IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案 问题描述 在IEEE PDF eXpress上上传论文后,出现Font XXX is not embedded的问题。 该问题是指你所插入的图片等,没有将对应的字体嵌入进去。 解决方案 以下以Origin Lab图片…...

计算机网络 (21)网络层的几个重要概念
前言 计算机网络中的网络层是OSI(开放系统互连)模型中的第三层,也是TCP/IP模型中的第二层,它位于数据链路层和传输层之间,负责数据包从源主机到目的主机的路径选择和数据转发。 一、网络层的主要功能 路由选择…...

企业网络性能监控
什么是网络性能监控 网络性能监控(NPM)是指对计算机网络的性能进行持续测量、分析和管理的过程,通过监控流量、延迟、数据包丢失、带宽利用率和正常运行时间等关键指标,确保网络高效、安全地运行,并将停机时间降至最低…...
halcon三维点云数据处理(五)创建代表工具和机器人底座的3D模型
目录 一、gen_robot_tool_and_base_object_model_3d 函数调用二、gen_arrow_object_model_3d 函数调用 首先说明一下这部分代码在find_box_3d这个例程中,非常好用的一个坐标系生成函数。 一、gen_robot_tool_and_base_object_model_3d 函数调用 RobotToolSize : 0.…...

容器技术思想 Docker K8S
容器技术介绍 以Docker为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前,程序直接部署在物理服务器上,依赖管理复杂,包括各类运行依赖,且易变,多程序混合部署时还可能产生依赖冲突,给程序…...

25年1月更新。Windows 上搭建 Python 开发环境:PyCharm 安装全攻略(文中有安装包不用官网下载)
python环境没有安装的可以点击这里先安装好python环境,python环境安装教程 安装 PyCharm IDE 获取 PyCharm PyCharm 提供两种主要版本——社区版(免费)和专业版(付费)。对于初学者和个人开发者而言,社区…...
Oracle job(定时任务)
1、job的作用 可以定时执行任务(分/次、时/次、天/次等) 2、创建job --创建job --注意点: --①job_no 为系统自动获取; --②存储过程名需要加‘;’ --③定时器开始执行时间可以填‘sysdate,表示立即执行 --④执行频…...
[python3]Excel解析库-xlwt
xlwt 是一个用于创建 Excel .xls 文件(即旧版的 Excel 97-2003 格式)的 Python 库。它允许你用 Python 编写程序来生成 Excel 文件,而不需要实际运行 Microsoft Excel 应用程序。请注意,xlwt 只支持写入 .xls 文件,并不…...

【Rust自学】10.3. trait Pt.1:trait的定义、约束与实现
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 题外话:trait的概念非常非常非常重要!!!整个第10章全都是Rust的重难点!&#x…...

大数据高级ACP学习笔记(2)
钻取:变换维度的层次,改变粒度的大小 星型模型 雪花模型 MaxCompute DataHub...

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署及常用命令
K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署及常用命令 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台;我这里是安装的其他开…...

【ArcGIS Pro二次开发实例教程】(2):BSM字段赋值
一、简介 一般的数据库要素或表格都有一个BSM字段,用来标识唯一值。 此工具要实现的功能是:按一定的规律(前缀中间的填充数字OBJECT码)来给BSM赋值。 主要技术要点包括: 1、ProWindow的创建,Label,Comb…...
OpenCV轮廓相关操作API (C++)
在OpenCV中,轮廓(contours)是图像处理中的一个重要概念,通常用于形状分析、物体检测等任务。OpenCV提供了多种与轮廓相关的API,可以在C中使用。 一.常用的与轮廓相关的操作及其对应的API函数 1.查找轮廓 findContou…...

[开源]自动化定位建图系统
系统状态机: 效果展示: 1、 机器人建图定位系统-基础重定位,定位功能演示 2、 机器人建图定位系统-增量地图构建,手动回环检测演示 3、敬请期待… 开源链接: 1、多传感器融合里程计 https://gitee.com/li-wenhao-lw…...
【时时三省】(C语言基础)局部变量和全局变量
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 以前所见到的程序大多数是一个程序只包含一个main函数,变量是在函数的开头处定义的。这些变量在本函数范围内有效,即在本函数开头定义的变量,在本函数中可…...

HarmonyOS Next 弹窗系列教程(4)
HarmonyOS Next 弹窗系列教程(4) 介绍 本章主要介绍和用户点击关联更加密切的菜单控制(Menu) 和 气泡提示(Popup) 它们出现显示弹窗出现的位置都是在用户点击屏幕的位置相关 菜单控制(Menu&…...

超声波清洗设备的清洗效果如何?
超声波清洗设备是一种常用于清洗各种物体的技术,它通过超声波振荡产生的微小气泡在液体中破裂的过程来产生高能量的冲击波,这些冲击波可以有效地去除表面和细微裂缝中的污垢、油脂、污染物和杂质。超声波清洗设备在多个领域得到广泛应用,包括…...
leetcode_206 反转链表
1. 题意 原地反转链表,非常经典的一道题。 2. 解决 2.1 非递归 非递归的比较好理解;链表需要维护前驱和后继两个信息,当我们要更改后继时,先要把原来的后继先存起来。 /*** Definition for singly-linked list.* struct List…...
gvim比较两个文件不同并合并差异
使用 gvim 比较两个文件的不同: 方式一,使用 gvim 同时打开两个待比较的文件。 比较通用方式是采用 gvim -d 选项,具体命令,如下: gvim -d <file1> <file2>方式二,先用 gvim 打开一个文件&am…...
Spring Boot 类加载机制深度解析
Spring Boot 类加载机制深度解析 前言 在 Java 应用开发中,类加载机制是一个重要且复杂的话题。Spring Boot 作为现代 Java 开发的主流框架,其类加载机制更是值得深入了解。本文将从基础概念到实际应用,全面解析 Spring Boot 的类加载机制。…...

在 UE5 蓝图中配置Actor类型的Asset以作为位置和旋转设置目标
目标 UE5的蓝图的事件图表里面,有一个模块(节点)如图,这是一个设置Actor的location和rotation量的模块,其中需要接收一个Target作为输入,这个Target应该就是一个在map中具备location和rotation信息的实例化…...
模块化架构下的前端调试体系建设:WebDebugX 与多工具协同的工程实践
随着前端工程化的发展,越来越多的项目采用模块化架构:单页面应用(SPA)、微前端、组件化框架等。这类架构带来了良好的可维护性和复用性,但也带来了新的调试挑战。 本文结合我们在多个模块化项目中的真实经验ÿ…...
代码训练LeetCode(23)随机访问元素
代码训练(23)LeetCode之随机访问元素 Author: Once Day Date: 2025年6月5日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 380. O(1) 时间插入、删除和获取随机元素 - 力扣(LeetCode)力…...

【Android基础回顾】一:Binder机制是什么?有什么用?
Android中的Binder机制是Android系统中最核心和最基础的进程间通讯机制。 1 什么是进程间通讯机制(IPC)? 众所周知,Android系统基于Linux开发,Linux系统里面本来就有进程间通讯机制。 1.1 Linux的IPC(Inter-Process Communication)概览 它…...