当前位置:首页 > 科技  > 软件

基于ArkTS的应用入场动画

来源: 责编: 时间:2023-10-17 18:05:03 406观看
导读想了解更多关于开源的内容,请访问:51CTO 开源基础软件社区https://ost.51cto.com前言相信读者对应用入场动画并不陌生。当用户打开某个应用时,应用得到响应,与此同时其在屏幕中所渲染的第一个画面通常是它的入场动画。当

pNJ28资讯网——每日最新资讯28at.com

想了解更多关于开源的内容,请访问:pNJ28资讯网——每日最新资讯28at.com

51CTO 开源基础软件社区pNJ28资讯网——每日最新资讯28at.com

https://ost.51cto.compNJ28资讯网——每日最新资讯28at.com

前言

相信读者对应用入场动画并不陌生。当用户打开某个应用时,应用得到响应,与此同时其在屏幕中所渲染的第一个画面通常是它的入场动画。当然,应用响应后所抛出的不一定是动画,它也可以是一个静态的页面,不过不论是动画还是静态页面,它们所起到的功能是相同的——在后台完成应用中的重要模块的初始化,贴出开发团队的slogen,亦或展示一些甲方的产品推广广告。pNJ28资讯网——每日最新资讯28at.com

本期笔者将以一个轻量Demo的开发流程为例,与笔者共同探索如何利于ArkTS生产应用的入场动画。pNJ28资讯网——每日最新资讯28at.com

正文

创建工程

打开DevEco Studio(开发工具的版本必须支持API9),创建一个新的project,相关勾选如下:pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

添加新页面

成功创建工程后,在工程文件目录中打开目录:Demo/entry/src/main/ets/pages, 接着右击page,选择New>TypeScript ArkTS File, 创建一个新的ArkTS文件,并将其命名为SecondpNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

接着,在工程文件目录中打开目录:Demo/entry/src/resources/base/profile/main_pages,添加Second页面的路径信息。注意,字符串'pages/Index’后面的逗号不能漏写。pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

编写新页面的UI

在编辑器中打开新创建的Second.ets,添加如下代码:pNJ28资讯网——每日最新资讯28at.com

@Entry@Componentstruct Index {  @State message: string = '主页面'  build() {    Row() {      Column() {        Text(this.message)          .fontSize(40)          .fontWeight(FontWeight.Bold)      }      .width('100%')    }    .height('100%')    .backgroundColor('#F1F1F1')  }}

事实上,这段代码来自于Index.ets, 我们只不过是将Index.ets的代码拷贝至Second.ets中后,修改了变量message的初值,并更换了页面的背景色。由于Second.ets所管理的页面在此次的开发案例中不是主角,所以我们简单设计一下它的UI就足够了。pNJ28资讯网——每日最新资讯28at.com

Second.ets的最终预览效果如下:pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

编写入场页面的UI

加入图片资源

Before coding,我们需要添加一份图片资源到工程的指定目录内。pNJ28资讯网——每日最新资讯28at.com

在工程文件目录中打开目录:Demo/entry/src/main/resources/rawfile, 添加一张任意的图片(可以在IDE中将待添加的图片资源直接粘贴至rawfile目录下,也可以在文件资源管理器中通过文件路径打开rawfile目录并添加图片资源),将其命名为logo1。当然,图片的格式没有要求,只要在之后的步骤中能被正确引用即可。pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

添加组件

在编辑器中打开Index.ets(此页面将作为入场页面), 删除Column组件内关于Text组件的代码块,增添一个新的Image件和一个新的Text组件,并填充它们的UI属性,相关代码如下。其中,新增的Image组件所引用的图片资源是上一个步骤中所添加的logo1.jpg。pNJ28资讯网——每日最新资讯28at.com

@Entry@Componentstruct First {  @State message: string = 'Hello World'  build() {    Row() {      Column() {        //删除页面初始化时默认带有的Text组件, 增加一个新的image件和一个新的Text组件        Image($rawfile('logo1.jpg'))          .height(120)          .width(120)        Text('Brunhild')          .fontSize(20)          .fontWeight(FontWeight.Bold)          .margin({            top:7          })      }      .width('100%')    }    .height('100%')  }}

预览器效果如下:pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

至此,我们已完成对Index.ets的页面UI绘制。接下来,我们需要为这两个新添的组件设置与属性动画有关的属性。属性动画(animation)是ArkUI提供的最基础和常用的动画功能之一,它的功能逻辑是,当组件的布局属性(譬如位置,大小,背景颜色)发生变化时,组件会按照已设置好的动画参数,从原有的布局状态过渡到变化后的布局状态,而这个过渡的拟连续过程便是用户所见到的动画。在这个基础上,我们可以制作一个简单的应用入场动画效果。pNJ28资讯网——每日最新资讯28at.com

添加关键属性

所涉及的两个重要属性分别是translate属性和animation属性。pNJ28资讯网——每日最新资讯28at.com

事实上,系统为每个被渲染的组件都设置属于它的相对坐标系。这个坐标系是一个平面直角坐标系,并且,相对于屏幕,X坐标轴正方向水平向右,Y坐标轴正方向竖直向下。当一个组件的translate属性被设置时,它的实际位置会跟着translate属性而偏移。比如,一个原本位于屏幕中央的组件,更改其translate属性为{x:100,y:0}后,其位置会相对屏幕中央往右平移100px。pNJ28资讯网——每日最新资讯28at.com

animation属性的可供设置的参数如下所示,每个参数都会在不同维度影响动画的最终效果。pNJ28资讯网——每日最新资讯28at.com

/**   * Animation duration, in ms.   * @since 7   */  /**   * Animation duration, in ms.   * @form   * @since 9   */  duration?: number;  /**   * Animation playback speed. A larger value indicates faster animation playback, and a smaller value indicates slower   * animation playback. The value 0 means that there is no animation.   * @since 7   */  tempo?: number;  /**   * Animation curve.   * @type { string | Curve}   * @since 7   */  /**   * Animation curve.   * @type { string | Curve | ICurve}   * @form   * @since 9   */  curve?: Curve | string | ICurve;  /**   * Animation playback mode. By default, the animation is played from the beginning after the playback is complete.   * @since 7   */  delay?: number;  /**   * Animation playback mode. By default, the animation is played from the beginning after the playback is complete.   * @since 7   */  iterations?: number;  /**   * Animation playback mode. By default, the animation is played from the beginning after the playback is complete.   * @since 7   */  /**   * Animation playback mode. By default, the animation is played from the beginning after the playback is complete.   * @form   * @since 9   */  playMode?: PlayMode;  /**   * Callback invoked when the animation playback is complete.   * @since 7   */  /**   * Callback invoked when the animation playback is complete.   * @form   * @since 9   */  onFinish?: () => void;

接下来,我们为组件添加关键属性。pNJ28资讯网——每日最新资讯28at.com

首先,定义变量 translateY_Logo,同时设置Image组件的translate属性和animation属性。pNJ28资讯网——每日最新资讯28at.com

@Entry@Componentstruct First {   	 ......  @State translateY_Logo:number = -200    //定义一个用@state修饰的number型变量translateY_Logo  build() {    Row() {      Column() {        //删除页面初始化时默认带有的Text组件, 增加一个新的image件和一个新的Text组件        Image($rawfile('logo1.jpg'))          .height(120)          .width(120)          //添加关键属性          .translate({            y:this.translateY_Logo          })          .animation({            //播放时长(ms)            duration:2000,            //播放速度            tempo:1,            //播放曲线,所选择的是‘快出慢入’            curve:Curve.FastOutSlowIn,            //延迟(ms)            delay:500,            //循环次数(-1为无限循环)            iterations:1,            //播放模式            playMode:PlayMode.Normal          })			......      }      .width('100%')    }    .height('100%')  }}

接着,定义变量 translateY_Title,同时设置Text组件的translate属性和animation属性。pNJ28资讯网——每日最新资讯28at.com

@Entry@Componentstruct First {		......  @State translateY_Title:number = 200    //定义一个用@state修饰的number型变量translateY_Title  build() {    Row() {      Column() {        //删除页面初始化时默认带有的Text组件, 增加一个新的image件和一个新的Text组件      	......        Text('Brunhild')          .fontSize(20)          .fontWeight(FontWeight.Bold)          .margin({            top:7          })          //添加关键属性          .translate({            y:this.translateY_Title          })          .animation({            delay:500,            duration:2000,            curve:Curve.FastOutSlowIn,            tempo:1,          })      }      .width('100%')    }    .height('100%')  }}

页面起始状态的效果如下,可以看到,设置translate属性后,Image组件往Y轴负方向偏移,Text组件则往Y轴正方向偏移。pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

最后,我们为Text组件添加onAppear回调。onAppear可以被理解为一个事件监听器,当一个绑定了onAppear的组件装载于显示器时,onAppear回调将被触发,执行onAppear()中所传入的操作语句。换句话说,Text组件在添加onAppear属性后,当此Text组件出现时(笔者也不清楚这个出现是如何定义的),onAppear立即触发,执行已写入的函数参数(即λ表达式中的内容)。pNJ28资讯网——每日最新资讯28at.com

在如下代码中,笔者为Text组件增加了onAppear回调,导入了router模块,并写入了相关操作语句:首先,改变Image组件和Text组件的translate属性,激活属性动画;之后,设置定时器(每4秒执行一次),使得系统在属性动画结束后执行页面跳转(跳转至Second页面);最后,销毁先前设置的定时器。pNJ28资讯网——每日最新资讯28at.com

import router from '@ohos.router';     //导入router模块@Entry@Componentstruct First {		......  @State translateY_Title:number = 200    //定义一个用@state修饰的number型变量translateY_Title  build() {    Row() {      Column() {        //删除页面初始化时默认带有的Text组件, 增加一个新的image件和一个新的Text组件      	......        Text('Brunhild')          .fontSize(20)          .fontWeight(FontWeight.Bold)          .margin({            top:7          })          //添加关键属性          .translate({            y:this.translateY_Title          })          .animation({            delay:500,            duration:2000,            curve:Curve.FastOutSlowIn,            tempo:1,          })          //增加onAppear回调          .onAppear(()=>{          	//改变属性参数            this.translateY_Logo = 0            this.translateY_Title = 0                        //设置定时器            let id = setInterval(()=>{            	//打印日志              console.info('router to Second')              //页面跳转              router.pushUrl({                url:'pages/Second'              })              //定时器执行之后立即销毁              clearInterval(id)            },4000,[])          })      }      .width('100%')    }    .height('100%')  }}

至此,一个关于入场动画的Demo便完成了。pNJ28资讯网——每日最新资讯28at.com

预览效果如下:pNJ28资讯网——每日最新资讯28at.com

pNJ28资讯网——每日最新资讯28at.com

结语

ArkTS的动画开发无疑是非常有趣的,如果读者想开发更加复杂的动画效果,不妨参考ArkTS的官方API文档,学习和玩转更多新奇的用法。pNJ28资讯网——每日最新资讯28at.com

文章相关附件可以点击下面的原文链接前往下载:pNJ28资讯网——每日最新资讯28at.com

https://ost.51cto.com/resource/3050pNJ28资讯网——每日最新资讯28at.com

想了解更多关于开源的内容,请访问:pNJ28资讯网——每日最新资讯28at.com

51CTO 开源基础软件社区pNJ28资讯网——每日最新资讯28at.com

https://ost.51cto.compNJ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-13676-0.html基于ArkTS的应用入场动画

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 面试中如何答好:FutureTask

下一篇: Golang 中的 Bufio 包详解之常用函数

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了——贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起“冯提莫”这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的“斗鱼一姐”,冯提莫在游戏直播的年代影响力不输于现
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • 与兆芯合作 联想推出全新旗舰版笔记本电脑开天N7系列

    联想与兆芯合作推出全新联想旗舰版笔记本电脑开天 N7系列。这个系列采用兆芯KX-6640MA处理器平台,KX-6640MA 处理器是采用了陆家嘴架构,16nm 工艺,4 核 4 线
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top