HarmonyOS应用开发-闪屏启动页

这篇具有很好参考价值的文章主要介绍了HarmonyOS应用开发-闪屏启动页。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、先上效果图

HarmonyOS应用开发-闪屏启动页,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文章来源地址https://www.toymoban.com/news/detail-755510.html

到了这里,关于HarmonyOS应用开发-闪屏启动页的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HarmonyOS开发】HarmonyOS-应用开发入门

    1. 【判断题】 10/10 在Windows系统下载安装DevEco Studio工具时,安装路径可以包含中文名。 错误(False)   2. 【判断题】 10/10 某开发者在使用远程真机运行应用时,不需要对应用进行签名;但使用本地真机运行应用时,必须需要对应用进行签名。 错误(False)   3. 【判断题】 10/10 在

    2024年02月04日
    浏览(44)
  • 【HarmonyOS】HarmonyOS应用开发者高级认证题库

    注:HarmonyOS应用开发者高级认证考试50道题,答对40及格,此题库有部分不清楚的选项,欢迎补充 1、HarmonyOS应用可以兼容OpenHarmony生态 正确(True) 2、云函数打包完成后,需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用 错误(False) 3、Ability是系统调度应用的最小单

    2024年02月03日
    浏览(67)
  • 【HarmonyOS应用开发】云开发(十九)

    HarmonyOS 云开发是 DevEco Studio 新推出的功能,可以让您在一个项目工程中,使用一种语言完成端侧和云侧功能的开发。 基于 AppGallery Connect Serverless 构建的云侧能力,让您无需构建和管理云端资源,随需使用,大大提高构建应用/元服务的效率。 认证服务: 可以为应用快速构建

    2024年02月21日
    浏览(38)
  • 【HarmonyOS】HarmonyOS应用开发者高级认证96分

    判断题 云函数打包完成后,需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用 错 在column和Row容器组件中,aligntems用于设置子组件在主轴方向上的对齐格式,justifycontent用于设置子组件在交叉轴方向上的对齐格式 错 首选项preferences是以Key-Value形式存储数据,其中

    2024年02月05日
    浏览(63)
  • HarmonyOS 应用开发入门

    DevEco Studio Release版本为:DevEco Studio 3.1.1。 Compile SDK Release版本为:3.1.0(API 9)。 构建方式为 HVigor,而非 Gradle。 最新版本已不再支持 (”Java、JavaScript” 、“类Web开发范式” 和 “FA 模型” )用于应用开发,因此大部分举例都以 (“ArkTS声明式范式” 和 “Stage 模型”)最

    2024年01月19日
    浏览(45)
  • 鸿蒙(HarmonyOS)应用开发指南

    1.1 简介 鸿蒙 (即 HarmonyOS ,开发代号 Ark ,正式名称为华为终端鸿蒙智能设备操作系统软件)是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的 分布式操作系统 。该系统利用“分布式”技术将 手机、电脑、平板、电视、汽车和智能穿戴 等多款设备

    2024年02月02日
    浏览(104)
  • HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

    2023年8月6日华为开发者大会2023(HDC.Together)圆满收官,伴随着HarmonyOS 4的发布,华为向开发者发布了汇聚所有最新开发能力的HarmonyOS NEXT开发者预览版,并分享了围绕 “一次开发,多端部署” “可分可合,自由流转” “统一生态,原生智能” 三大HarmonyOS应用开发理念的实

    2024年02月12日
    浏览(44)
  • 鸿蒙应用开发尝鲜:初识HarmonyOS

    来源:华为官方网站 : https://developer.huawei.com/ 相信大家对鸿蒙应用开发也不在陌生,很多身处互联网行业或者不了解的人们现在也一定都听说过华为鸿蒙.这里我将不再说废话,直接步入正题 HarmonyOS应用开发采用的是ArkTS语言,ArkTS是在TypeScript(简称TS)基础上的拓展,而TS又是JavaScrip

    2024年02月02日
    浏览(65)
  • 鸿蒙HarmonyOS应用开发初体验

    最近华为发布mt60新机火了,作为一名移动开发程序员,对鸿蒙系统开发移动端就很感兴趣了。 开发工具:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 下载完后按默认安装就可以了,界面跟AS很类似,之前我jdk环境配置就不在配置了,不懂的可以百度下很多教程。 这是基

    2024年02月09日
    浏览(54)
  • 【HarmonyOS】鸿蒙应用开发基础认证题目

    【HarmonyOS】鸿蒙应用开发基础认证题目; 随着鸿蒙系统的不断发展,前不久,华为宣布了重磅消息,HarmonyOS next 开发者版本会在明年(2024)开放,并不再支持Android应用!这也意味着,移动端开发者今后又多了一个适配平台,也到了必须学的时候了。 目前已知一线大厂均已开

    2024年02月04日
    浏览(148)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包