HarmonyOS应用开发-闪屏启动页

2023-12-10 08:20

本文主要是介绍HarmonyOS应用开发-闪屏启动页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        这是鸿蒙开发者网站的一个应用《溪村小镇》示例代码,把闪屏启动页单拿出来,分析一下代码。

一、先上效果图

这是应用打开时的一个启动页,启动页会根据三个时间段(白天、傍晚、晚上)来分别展示溪村小镇不同的景色。

二、实现方法:

1.在pages页面下新建一个页面命名为“Splash”,Splash页面的代码在下面展示。

2.然后在onWindowStageCreate生命周期中配置启动页入口,可以看到“pages/Splash”为启动页入口:

// EntryAbility.ets
onWindowStageCreate(windowStage: window.WindowStage) {// 设置沉浸式窗口,背景透明const windowBarMag = new WindowBarManager();windowBarMag.immersiveWindow(windowStage, Const.TRANSPARENT_COLOR, true);// 加载启动页内容windowStage.loadContent('pages/Splash', (err, data) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');});
}
  • WindowBarManager用于管理窗口样式,这里设置了沉浸式窗口,并将背景设为透明。
  • 通过windowStage.loadContent加载启动页的内容,路径为'pages/Splash'。

        启动页会在aboutToAppear生命周期内初始化轮播图片资源及定时任务,会展示5秒溪村的优美风景,用户可以点击右上角的跳过直接进入应用主页,也可以等5秒结束自动进入应用主页;5秒倒计时结束、用户主动点击跳过或启动页面销毁时都会取消定时器任务。

启动页的代码如下,代码分析在下面:

import router from '@ohos.router';
import { CommonConstants as Const } from '../common/constants/CommonConstants';
import { splashImages } from '../viewmodel/SplashModel';@Entry
@Component
struct Splash {private swiperController: SwiperController = new SwiperController();private data: Resource[]@State showSwiper: boolean = false;@State countdown: number = Const.COUNTDOWN;private timer: number = -1;// 在此生命周期内根据当前时间段分配轮播展示的溪村小镇风景图aboutToAppear(): void {let hours = new Date().getHours();if (hours >= Const.MORNING_TIME && hours < Const.EVENING_TIME) {this.data = splashImages.day;} else if (hours >= Const.EVENING_TIME && hours <= Const.NIGHT_TIME) {this.data = splashImages.dusk;} else {this.data = splashImages.night;}// 启动画面展示3秒后 轮播展示溪村小镇风景setTimeout(() => {this.showSwiper = true;this.startTiming();}, Const.SPLASH_DURATION)}// 轮播展示溪村小镇风景倒计时5秒startTiming() {this.timer = setInterval(() => {this.countdown--;if (this.countdown === 0) {this.clearTiming();// 5秒钟后自动跳转到应用首页this.jumpToMainPage();}}, Const.DURATION);}// 清理定时器clearTiming() {if (this.timer !== -1) {clearInterval(this.timer);this.timer = -1;}}// 跳转到应用首页jumpToMainPage() {this.clearTiming();router.replaceUrl({url: 'pages/Index'});}// 页面销毁时清理定时器aboutToDisappear() {this.clearTiming();}build() {Column() {Stack() {// 轮播展示溪村小镇风景if (this.showSwiper) {Swiper(this.swiperController) {ForEach(this.data, (item: Resource) => {Image(item).width(Const.FULL_SIZE).height(Const.FULL_SIZE).objectFit(ImageFit.Cover)})}.loop(true).interval(2 * Const.DURATION).duration(Const.DURATION).autoPlay(true).indicatorStyle({bottom: $r('app.float.100'),color: $r('app.color.swiper_dot_color')}).curve(Curve.Linear).onChange((index: number) => {console.info(index.toString())})// 轮播倒计时,点击可进入应用主页Text() {Span($r('app.string.skip'))Span(`${this.countdown}`)}.onClick(() => this.jumpToMainPage()).fontColor(Color.White).fontSize($r('app.float.12fp')).backgroundColor($r('app.color.swiper_jump_bg_color')).width($r('app.float.63')).height($r('app.float.24')).borderRadius($r('app.float.10')).textAlign(TextAlign.Center).position({x: Const.PERCENTAGE_78,y: $r('app.float.35')})} else { // 应用启动画面Image($r('app.media.splash_bg')).width(Const.FULL_PERCENT).height(Const.FULL_PERCENT)Image($r('app.media.ic_splash')).width($r('app.float.192')).height($r('app.float.192')).offset({y: `-${Const.PERCENTAGE_15}`}).objectFit(ImageFit.Contain)Column() {Text(Const.SPLASH_DES).fontColor(Color.White).fontSize($r('app.float.font_size_24fp')).fontWeight(FontWeight.Medium)Text(Const.SPLASH_WELCOME).fontSize($r('app.float.font_size_16fp')).fontColor(Color.White).margin({top: $r('app.float.5')})}.offset({y: Const.PERCENTAGE_25})}}}.height(Const.FULL_SIZE).width(Const.FULL_SIZE)}
}

让我来对这段代码进行详细的解释:

  1. 导入模块:

    import router from '@ohos.router';
    import { CommonConstants as Const } from '../common/constants/CommonConstants';
    import { splashImages } from '../viewmodel/SplashModel';
    

    这里导入了一些模块和常量,其中 router 模块用于导航,CommonConstants 包含了一些常量,Const是它的别名,在代码中就可以用Const.COUNTDOWN来使用其COUNTDOWN常量了,splashImages 包含了一些溪村小镇风景图的资源。

  2. 组件定义:

    @Entry
    @Component
    struct Splash {
    

    使用 HarmonyOS 提供的注解 @Entry@Component 定义了一个名为 Splash 的组件结构。

  3. 私有变量和状态:

    private swiperController: SwiperController = new SwiperController();
    private data: Resource[];
    @State showSwiper: boolean = false;
    @State countdown: number = Const.COUNTDOWN;
    private timer: number = -1;
    

    在组件结构中定义了一些私有变量和状态,其中包括一个用于控制轮播的 swiperController,一个存储资源的数组 data,以及控制页面状态的变量和计时器。

  4. 生命周期函数 aboutToAppear

    // 在此生命周期内根据当前时间段分配轮播展示的溪村小镇风景图aboutToAppear(): void {//获取当前的时间:几点钟let hours = new Date().getHours();//大于6点并且小于18点,属于白天if (hours >= Const.MORNING_TIME && hours < Const.EVENING_TIME) {this.data = splashImages.day;} else if (hours >= Const.EVENING_TIME && hours <= Const.NIGHT_TIME) {//大于18点小于19点,属于黄昏this.data = splashImages.dusk;} else {//其他时间就是晚上了this.data = splashImages.night;}// 启动画面展示3秒后 轮播展示溪村小镇风景setTimeout(() => {this.showSwiper = true;this.startTiming();}, Const.SPLASH_DURATION)}

    在组件即将显示的生命周期内,根据当前时间段分配溪村小镇风景图,并设置定时器,在一定时间后展示轮播图。

  5. 定时器函数 startTimingclearTiming

    startTiming() {this.timer = setInterval(() => {this.countdown--;if (this.countdown === 0) {this.clearTiming();this.jumpToMainPage();}}, Const.DURATION);}clearTiming() {if (this.timer !== -1) {clearInterval(this.timer);this.timer = -1;}}

    这两个函数用于启动和清理倒计时定时器。

  6. 页面跳转函数 

    jumpToMainPage() {this.clearTiming();router.replaceUrl({url: 'pages/MainPage'});}
    

             使用系统提供的router组件,用于页面跳转到应用首页,并在跳转前清理定时器。其中router.replaceUrl代表用下一个页面代替当前页,当前页会被销毁,进入到下一页之后如果按返回键也是不能返回到启动页的。                                                                                         此外router还有router.pushUrl方法可以保存当前页并跳转到下一页,router.back返回上一页面或指定的页面,router.clear清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面等方法。

  7. 生命周期函数 aboutToDisappear

    aboutToDisappear() {this.clearTiming();
    }
    

    在组件即将销毁的生命周期内清理定时器。

  8. 页面构建函数 build

    build() { // ... }

    构建页面的函数,使用 HarmonyOS 提供的组件和样式语法构建了页面的布局和样式。

        总体来说,这段代码实现了一个具有定时展示溪村小镇风景的启动画面,包括轮播图、倒计时和页面跳转等功能。在页面的构建函数中使用了 HarmonyOS 提供的组件和样式语法来定义页面的结构和样式。

代码地址:Codelabs: 分享知识与见解,一起探索HarmonyOS的独特魅力。 - Gitee.com

这篇关于HarmonyOS应用开发-闪屏启动页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/476550

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof