【鸿蒙开发】闪屏页面练习

server/2024/11/14 4:44:26/

1. 创建页面 Index.ets

@Entry
@Component
struct Index {build() {Column() {Text("首页").fontSize(50).fontWeight(FontWeight.Bold)}.width('100%').height('100%')}
}

2. 创建页面 SplashScreen.ets

@Entry
@Component
struct SplashScreen {@State message: string = 'SplashScreen'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

3. 创建store工具 StoreUtil.ets

import preferences from '@ohos.data.preferences'export class StoreUtil {constructor(private readonly context: Context, private readonly storeName: string) {}getStore() {return preferences.getPreferences(this.context, this.storeName)}async getData<T>(key): Promise<T> {const store = await this.getStore()const data = await store.get(key, "{}") as stringreturn JSON.parse(data) as T}async setData<T>(key: string, data: T): Promise<void> {const store = await this.getStore()await store.put(key, JSON.stringify(data))await store.flush()}async delData(key: string): Promise<void> {const store = await this.getStore()await store.delete(key)await store.flush()}
}

4. 创建类型 typs/SplashScreen.ets

export interface ISplashScreen {show: booleanduration: numberimage: string | Resource
}

5. 修改 EntryAbility

  • 修改 EntryAbility.ts 后缀为 EntryAbility.ets
  • 创建 userStore
  • 模拟获取闪屏数据
  • 从 userStore 获取闪屏数据
  • 加载首页或者闪屏页
  async onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');// 用户仓库const userStore = new StoreUtil(this.context, "userStore",)// 模拟获取闪屏数据await new Promise(resolve => {setTimeout(async () => {const splashScreen: ISplashScreen = {show: true,duration: 10,image: $r("app.media.splash_screen")}await userStore.setData("userSplashScreen", splashScreen)resolve(splashScreen)}, 2000)})// 从仓库获取闪屏数据const splashScreen = await userStore.getData<ISplashScreen>("userSplashScreen")if (splashScreen.show) {// 加载闪屏页面windowStage.loadContent('pages/SplashScreen', (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) ?? '');});} else {// 加载首页windowStage.loadContent('pages/Index', (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) ?? '');});}}

6. 修改闪屏页面

修改 SplashScreen.ets

import router from '@ohos.router'
import { ISplashScreen } from '../types/SplashScreen'
import { StoreUtil } from '../utils/StoreUtil'@Entry
@Component
struct SplashScreen {@State timer: number = -1@State splashScreenObj: ISplashScreen = { show: true, duration: 10, image: '' }userStore: StoreUtil = new StoreUtil(getContext(this), 'userStore')aboutToAppear() {this.getData()}aboutToDisappear() {clearInterval(this.timer)}async getData() {// 获取闪屏数据const data = await this.userStore.getData<ISplashScreen>('userSplashScreen')this.splashScreenObj.duration = data?.duration ?? 10this.splashScreenObj.image = data?.image ?? $r('app.media.splash_screen')// 倒计时this.timer = setInterval(() => {if (this.splashScreenObj.duration === 0) {clearInterval(this.timer)router.replaceUrl({ url: 'pages/Index' })return}this.splashScreenObj.duration--}, 1000)}build() {Stack({ alignContent: Alignment.TopEnd }) {Image(this.splashScreenObj.image).width('100%').height('100%')Row() {Text(`${this.splashScreenObj.duration}秒后跳过`).padding({ left: 10, right: 10 }).margin({ right: 20, top: 20 }).height(30).fontSize(14).borderRadius(15).backgroundColor("#ccc").textAlign(TextAlign.Center)Text(`跳过`).padding({ left: 10, right: 10 }).margin({ right: 20, top: 20 }).height(30).fontSize(14).borderRadius(15).backgroundColor("#ccc").textAlign(TextAlign.Center).onClick(() => {router.replaceUrl({ url: 'pages/Index' })})}}.width('100%').height('100%')}
}


http://www.ppmy.cn/server/15160.html

相关文章

使用微信开发者工具模拟微信小程序定位

哈喽&#xff0c;各位同僚们&#xff0c;我们平时在测试微信小程序的时候&#xff0c;如果小程序中有获取定位或者地图的功能&#xff0c;测试场景中常常需要去模拟不同的位置&#xff0c;例如我们模拟在电子围栏的外面、里面和边界区域等。那么&#xff0c;我们如何在模拟微信…

python数字验证码自动识别

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在网络上&#xff0c;许多网站和应用程序使用验证码&#xff08;Completely Automated Publ…

MySql CPU激增原因分析

QPS激增会导致CPU占用升高 分析 可以使用监控工具&#xff0c;查看CPU利用率曲线图和QPS曲线图进行对比。如果CPU曲线图波动情况跟QPS曲线图波动情况基本保持一致&#xff0c;可以明确明确CPU升高时QPS上升导致。反之&#xff0c;CPU曲线图对比QPS曲线图有不同步的峰值抖动&am…

【教程】MySQL数据库学习笔记(五)——约束(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…

Ubuntu 20.04.6下载、安装

一、下载 下载地址&#xff1a;https://cn.ubuntu.com/download 下载版本&#xff1a;ubuntu-20.04.6-desktop-amd64.iso 二、安装 参考博客&#xff1a; https://blog.csdn.net/lhl_blog/article/details/123406322 https://www.cnblogs.com/fieldtianye/p/17879840.html…

C语言(1):初识C语言

0 安装vs2022 见 鹏哥视频即可 1 什么是C语言 c语言擅长的是底层开发&#xff01; 现在一般用的是C89和C90的标准 主要的编辑器&#xff1a; 2 第一个C语言项目 .c 源文件 .h头文件 .cpp c文件 c语言代码中一定要有main函数 标准主函数的写法&#xff1a; int main() { …

GitHub的使用

文章目录 一、什么是Git1.1、与其他版本控制系统的区别概念上的差异本地操作数据的完整性附加模型 1.2、三种状态和基本Git工作流程Git的基本工作流程 二、首次Git设置2.1、Git的安装&#xff08;Linux&#xff09;2.2、Git的安装&#xff08;Windows&#xff09;2.3、Git配置2…

QT从入门到实战x篇_22_番外1_Qt事件系统

文章目录 1. Qt事件系统简介1.1 事件的来源和传递1.2 事件循环和事件分发1.2.1 QT消息/事件循环机制1.2.1.1 机制解释1.2.1.2 两个问题 1.2.2 事件分发 2. 事件过滤基础2.1 什么是事件过滤器&#xff08;Event Filter&#xff09;&#xff1f;2.2 如何安装事件过滤器 3. 事件过…