六、鸿蒙开发-导航组件、定时器组件、动画

提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0+鸿蒙NEXT星河版零基础教程课整理

链接指引 => 尚硅谷2024最新鸿蒙开发HarmonyOS4.0+鸿蒙NEXT星河版零基础教程



文章目录

  • 一、定时器
    • 1.1 参数
    • 1.2 事件
  • 二、导航组件
    • 2.1 概述
    • 2.2 导航栏样式
      • 2.2.1 导航栏位置
      • 2.2.2 可滚动导航栏
      • 2.2.3 自定义导航栏
  • 三、动画
    • 3.1 概述
    • 3.2 布局更新动画
      • 3.2.1 显式动画
      • 3.2.2 属性动画
    • 3.3 组件转场动画


一、定时器

计时器需要⽤到 TextTimer 组件,该组件的用法如下

1.1 参数

TextTimer 需要传⼊⼀个 controller 参数,⽤于控制计时器的启动、暂停和重置,具体用法如下

//controller声明
timerController: TextTimerController = new TextTimerController();
//组件声明
TextTimer({ controller: this.timerController })
//启动计时器
this.timerController.start()
//暂停计时器
this.timerController.pause()
//重置计时器
this.timerController.reset()

1.2 事件

TextTimer 的常⽤事件为 onTimer ,只要计时器发生变化,就会触发该事件,因此可用该事件记录⽤
时。该方法接收的回调函数定义如下

(utc: number, elapsedTime: number) => void

其中 utc 表示当前的时间戳, elapsedTime 表示⾃计时器开始以来所经过时间,单位是毫秒。

二、导航组件

2.1 概述

Tabs组件的基本用法如下

Tabs() {TabContent() {Text('首页内容')}.tabBar('首页')TabContent() {Text('发现内容')}.tabBar('发现')TabContent() {Text('我的内容')}.tabBar("我的")
}

11
其中,TabContent() 组件表示每个标签页的内容,其属性tabBar表示其对应的页签。

2.2 导航栏样式

2.2.1 导航栏位置

导航栏的位置可通过vertical()barPosition()进行设置。vertical()用于设置导航栏是否垂直排列,其参数为boolean类型,默认值为falsebarPosition()用于设置导航栏的位置,参数为枚举类型BarPosition,可选的枚举值有BarPosition.Start和BarPosition.End。两个方法配合使用,可实现如下各种效果

verticalfalsefalsetruetrue
barPositionStartEndStartEnd
效果1235

2.2.2 可滚动导航栏

当标签页较多时,屏幕的宽度可能无法容纳所有的所有的页签,如下图所示

d
此时可以使用barMode()方法将导航栏设置为可滚动的。该方法的参数为枚举类型BarMode,可选的枚举值有BarMode.ScrollableBarMode.Fixed

2.2.3 自定义导航栏

默认的导航栏页签只有文字内容,如需更加复杂的页签,如下图所示:
tabbar
例子:

@Entry
@Component
struct BarCustomPage {@State currentIndex: number = 0;build() {Tabs() {TabContent() {Text('首页')}.tabBar(this.barBuilder(0, '主页', $r('app.media.icon_home'), $r('app.media.icon_home_selected')))TabContent() {Text('消息')}.tabBar(this.barBuilder(1, '消息', $r('app.media.icon_message'), $r('app.media.icon_message_selected')))TabContent() {Text('我的')}.tabBar(this.barBuilder(2, '我的', $r('app.media.icon_mine'), $r('app.media.icon_mine_selected')))}.barPosition(BarPosition.End).onChange((index) => {this.currentIndex = index;})}@Builder barBuilder(index: number, title: string, icon: Resource, iconSelected: Resource) {Column() {Image(this.currentIndex === index ? iconSelected : icon).width(25).height(25)Text(title).fontColor(this.currentIndex === index ? '#0491d1' : '#8a8a8a').fontWeight(FontWeight.Medium)}}
}

三、动画

3.1 概述

动画可以在UI界面发生变化时,提供渐变过渡效果,提升用户体验。动画的实现原理是通过在一段时间内连续播放一系列静止画面(帧),从而产生流畅的视觉效果。
在鸿蒙应用中,实现动画效果非常方便,我们只需明确组件的初始状态和结束状态,并配置一些动画相关的参数(动画时长),系统就会自动的生成中间的过度状态,并呈现出动画效果。
3.1
在鸿蒙应用中,开发者可以为组件配置两类动画效果,一是组件的布局相关属性(如尺寸、位置等)发生变化时的布局更新动画,二是组件出现或消失时的组件转场动画,各自的效果如下图所示

布局更新动画组件转场动画
3.1.13.1.2

3.2 布局更新动画

布局更新动画可通过两种方式实现,分别是显式动画和属性动画。

3.2.1 显式动画

animateTo()是一个全局的动画函数,该函数可用于触发动画效果,定义如下

animateTo(value: AnimateParam, event: () => void): void

该函数共有两个参数,分别是

  • 动画参数
    该参数用于设置动画时长、属性值变化曲线等等,其类型为AnimateParam,其包含的属性有

    名称类型描述
    durationnumber动画持续时间,单位为毫秒,默认值为1000
    curveCurve动画曲线
    delaynumber延迟播放,单位为毫秒,默认值为0
    iterationsnumber循环播放次数,默认值为1
    playModePlayMode动画播放模式
    onFinish() => void动效播放完成回调
  • 匿名函数
    该函数用于修改组件的属性,由该函数导致的组件布局变化,都会产生动画效果。

@Entry
@Component
struct AnimateToPage {@State length: number = 150;build() {Column() {Image($r('app.media.img_atguigu')).width(this.length).height(this.length)Blank()Row({ space: 50 }) {Button('缩小').backgroundColor(Color.Orange).onClick(() => {animateTo({duration:500},()=>{this.length = 150})})Button('放大').backgroundColor(Color.Green).onClick(() => {animateTo({duration:500},()=>{this.length = 300})})}}.padding({ top: 200, bottom: 200 }).width('100%').height('100%')}
}

3.2.2 属性动画

animation()是一个组件的属性方法,该方法同样可用于实现动画效果。使用该方法实现动画效果时需要注意两点,第一点是该方法的参数,其类型为AnimateParam,用于配置动画时长、动画曲线等参数。第二点是该属性方法的位置,用于产生动画效果的属性方法必须位于animation()之前,例如

Image($r('app.media.img_atguigu')).width(this.length).height(this.length).animation({ duration: 500}).margin({ left: this.marginLeft })

配置完animation()属性后,只要我们修改其之前的属性,就会产生相应的动画效果。

@Entry
@Component
struct AnimationPage {@State length: number = 150;build() {Column() {Image($r('app.media.img_atguigu')).animation({duration:500}).width(this.length).height(this.length)Blank()Row({ space: 50 }) {Button('缩小').backgroundColor(Color.Orange).onClick(() => {this.length = 150})Button('放大').backgroundColor(Color.Green).onClick(() => {this.length = 300})}}.padding({ top: 200, bottom: 200 }).width('100%').height('100%')}
}

3.3 组件转场动画

组件转场效果需要通过transition()属性和animateTo()方法来实现。其中transition()属性方法来设置组件的转场效果,支持的效果有平移、透明度、旋转、缩放等,animateTo()用于触发上述的组件转场动画效果,具体用法如下

@State flag:boolean = false; //状态变量,用于控制组件出现或消失if(this.flag){Text('hello world').transition(...) //transition()用于设置组件的转场效果
}Button('出现').onClick(() => {//animateTo()用于触发动画效果animateTo({ duration: 5000, curve: Curve.Linear, iterations: 1 }, () => {this.flag = true;})
})

transition()方法的参数类型为TransitionOptions,其包含的属性有

参数名称参数类型参数描述效果
typeTransitionType用于声明动画效果用于组件出现还是消失,可选值有Insert、Delete和All
opacitynumber用于设置透明度变化效果。为出现动画起点的透明度或消失动画终点的透明度。取值范围为[0, 1],默认值为1。opacity
translate1用于设置平移效果,为出现动画起点的偏移量和消失动画终点的偏移量。- x用于设置横向偏移量 - y用于设置纵向偏移量translate
scale22用于设置缩放效果,为出现动画起点的缩放倍数和消失动画终点的缩放倍数。(x,y)用于设置横向和纵向的缩放倍数。(centerX,centerY)用于设置缩放中心点的坐标,坐标原点是组件的左上角。scale
rotatesdd用于设置旋转效果。为出现动画起点的旋转角度和消失动画终点的旋转角度。(x,y,z)用于设置旋转轴方向,例如(1,0,0)表示沿x轴旋转,(0,1,0)表示沿y轴旋转,(0,0,1)表示沿z轴旋转。(centerX,centerY)用于设置旋转轴原点,默认值为(50% ,50%),表示组件中心。angle用于设置旋转角度。rotate

例子:

@Entry
@Component
struct TransitionPage {@State flag: boolean = false;build() {Column() {if (this.flag) {Image($r('app.media.img_atguigu')).width(150).height(150)//透明度// .transition({ type: TransitionType.All, opacity: 0 })//平移// .transition({ type: TransitionType.All, translate: { x: 100 } })//缩放// .transition({ type: TransitionType.All, scale: { x: 0, y: 0 } })//旋转.transition({type: TransitionType.All,rotate: {x: 0,y: 0,z: 1,angle: 90,centerY: 0,centerX: 0},opacity: 0})}Blank()Row({ space: 50 }) {Button('消失').backgroundColor(Color.Orange).onClick(() => {animateTo({ duration: 500 }, () => {this.flag = false;})})Button('出现').backgroundColor(Color.Green).onClick(() => {animateTo({ duration: 500 }, () => {this.flag = true;})})}}.padding({ top: 200, bottom: 200 }).width('100%').height('100%')}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10541.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【含文档】基于ssm+jsp的流浪动物收养系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

TTL器件和CMOS器件的逻辑电平

一、逻辑电平的一些概念 要了解逻辑电平的内容,首先要知道以下几个概念的含义: 1:输入高电平(VIH): 保证逻辑门的输入为高电平时所允许的最小输入高电平,当输入电平高于VIH时,则认…

10. java基础知识(下)

文章目录 一、一带而过二、字符串类型String1. 简单了解2. 关于结束符\03. 自动类型转换与强制类型转换 三、API文档与import导包1. API文档2. import导包 四、java中的数组1. 创建2. 遍历3. 补充4. Arrays类① 简单介绍② 练习 五、方法的重载六、规范约束七、内容出处 一、一…

Ubuntu下的截图工具Flameshot

安装Flameshot截图工具 sudo apt install flameshot配置快捷键Alt A 进入系统设置settings,找到Keyboard下的Keyboard Shortcuts 快捷键设置面板,如下图 添加一个快捷Alt A Add Custom Shortcut设置如上内容 Name设置为: Flameshot Sc…

(60)使用LMS算法和NLMS(归一化LMS)算法进行降噪

文章目录 前言一、关于自适应降噪仿真的几点说明1.降噪2. 参考信号与噪声信号3. LMS算法的步长4.自适应降噪原理5.维纳滤波器系数 二、LMS与NLMS自适应降噪的仿真三、仿真结果 前言 本文介绍了LMS自适应滤波器和NLMS自适应滤波器在降噪方面的应用,阐明期望信号、参…

如何从Python函数中返回列表

在 Python 中,可以轻松地从函数中返回一个列表。可以将列表直接作为返回值,通过 return 语句将其返回。 1、问题背景 在编写一个游戏时,需要创建一个函数来返回一个列表变量,以便将其传递给另一个变量。但是,在运行程…

深 度 学 习

神经网络基础 一、逻辑回归( Logic Regression ) 1 问题的模型 模型: 其中xx为输入量,y^y^​预测量,σ()σ()激活函数。   逻辑回归主要用于二分类问题的拟合:0≤y^P(y1∣x)≤10≤y^​P(y1∣x)≤1,σ(z)σ(z)如图…

GEE 数据集——美国gNATSGO(网格化国家土壤调查地理数据库)完整覆盖了美国所有地区和岛屿领土的最佳可用土壤信息

目录 简介 代码 引用 网址推荐 知识星球 机器学习 gNATSGO(网格化国家土壤调查地理数据库) 简介 gNATSGO(网格化国家土壤调查地理数据库)数据库是一个综合数据库,完整覆盖了美国所有地区和岛屿领土的最佳可用土…

(金蝶云星空)客户端追踪SQL

快捷键 ShitfCtryAltM 点击开始、最后操作功能、然后查看报告 SQL报告

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能,今天继续进行开发,创作不易,请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

【数据处理】数据预处理·数据变换(熵与决策树)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必备知识_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

【电子通识】TINA-TI 如何产生动态电流波形?

在仿真过程中我们有些时候需要动态电流负载。比如说从5A跳到1A。那这种情况下我们怎么仿真呢? 首先打开TINA-TI软件,找到Sources源,放置一个可控电流源。 放置好后双击器件打开属性,点到Signal信号框中的三个小点。 找到piecewise…

【Qt聊天室客户端】登录窗口

1. 验证码 具体实现 登录界面中创建验证码图片空间&#xff0c;并添加到布局管理器中 主要功能概述&#xff08;创建一个verifycodewidget类专门实现验证码操作&#xff09; 详细代码 // 头文件#ifndef VERIFYCODEWIDGET_H #define VERIFYCODEWIDGET_H#include <QWidget>…

十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解

目录 1. spring-boot-starter-web 简介 1.1 作用与功能&#xff1a; 1.2 引入方式&#xff1a; 1.3 包含的核心依赖&#xff1a; 2. 自动配置原理 3. 内嵌 Servlet 容器 3.1 默认 Tomcat 配置&#xff1a; 3.2 替换容器&#xff08;Jetty 或 Undertow&#xff09;&#…

Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码...

全文链接&#xff1a;https://tecdat.cn/?p38195 股票市场在经济发展中占据重要地位。由于股票的高回报特性&#xff0c;股票市场吸引了越来越多机构和投资者的关注。然而&#xff0c;由于股票市场的复杂波动性&#xff0c;有时会给机构或投资者带来巨大损失。考虑到股票市场的…

MySQL中的INT(4)里面的4究竟代表着什么

目录 1. 理解INT类型中的数字2. INT显示宽度与INSERT操作3. SELECT、INSERT、UPDATE、DELETE与显示宽度4. 实际应用中的影响场景5. 创建表时的建议 1. 理解INT类型中的数字 在MySQL中&#xff0c;当你定义一个整数字段为INT(M)&#xff0c;这里的M代表的是显示宽度。 这个数字…

Spring Boot实现的工程认证计算机课程管理解决方案

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于工程教育认证的计算机课程管理平台的相…

中药香料价钱快速划价计算器软件 中药文本识别计算费用管理系统操作教程

一、概述 【软件试用版资源文件下载可点文章最后官网卡片了解】 中药香料价钱快速划价计算器软件 中药文本识别计算费用管理系统操作教程 ‌核心功能‌&#xff1a;快速划价与账单管理。 ‌快速划价‌&#xff1a;复制药方文本&#xff0c;点击划价按钮即可计算总金额‌。‌账…

代码随想录刷题记录(二十五)——54. 替换数字

&#xff08;一&#xff09;问题描述 54. 替换数字&#xff08;第八期模拟笔试&#xff09;https://kamacoder.com/problempage.php?pid1064给定一个字符串 s&#xff0c;它包含小写字母和数字字符&#xff0c;请编写一个函数&#xff0c;将字符串中的字母字符保持不变&#…

【温度表达转化】

【温度表达转化】 C语言代码C代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 利用公式 C5∗(F−32)/9 &#xff08;其中C表示摄氏温度&#xff0c;F表示华氏温度&#xff09; 进行计算转化。 输出 输出一行&#x…