HarmonyOS NEXT应用开发案例——滑动页面信息隐藏与组件位移效果

介绍

在很多应用中,向上滑动"我的"页面,页面顶部会有如下变化效果:一部分信息逐渐隐藏,另一部分信息逐渐显示,同时一些组件会进行缩放或者位置移动。向下滑动时则相反。

效果图预览

使用说明
  1. 向上滑动页面,出现如下变化:用户名/选择身份/设置图标/客服图标逐渐隐藏,用户头像尺寸逐渐缩小并向右上平移,顶部"返回"文本后方用户名逐渐显示。
  2. 滑动到顶部后,向下滑动页面,出现如下变化:用户头像尺寸逐渐变大并向左下平移,顶部"返回"文本后方的用户名逐渐隐藏,原来的用户名/选择身份/设置图标/客服图标逐渐显示。

实现思路

本例涉及的关键特性和实现方案如下:

  1. 将屏幕从上向下分为三部分,第一部分Row组件包含"返回"和初始状态下隐藏的用户名,第二部分Row包含用户头像/用户名/选择身份/设置/客服,下方其余部分位第三部分。本例场景的变化体现在第一和第二部分。源码参考SlideToHideAndDisplace
Column() {Row() {...}.padding($r('app.integer.padding_small')).width($r('app.string.size_full')).alignItems(VerticalAlign.Center)Row() {...}.height($r('app.integer.height_one_hundred')).width($r('app.string.size_full'))Scroll() {...}
}
  1. 在第一和第二部分中,使用@State装饰器装饰相关的组件属性,使之与自定义组件的渲染绑定起来,状态变量改变时,UI会发生对应的渲染改变。用户头像的缩放通过改变其width和height属性值的大小来刷新,用户头像的位移通过改变其margin属性中的top和left的大小来刷新。其他一些组件的显隐变化通过改变其opacity属性值的大小来刷新。源码参考SlideToHideAndDisplace
  @State userRowOpacity: number = 1;@State userImageHeight: number = 50;...build() {Column() {Row() {...Text($r('app.string.phone_number')).opacity(this.userNameOpacity) // userNameOpacity控制顶部用户名的透明度Blank()Text("设置").opacity(this.userNameOpacity) // 设置的文字透明度与顶部用户名相同Text("客服").opacity(this.userNameOpacity) // 客服的文字透明度与顶部用户名相同}Row() {Image($r('app.media.batman')).width(this.userImageHeight).height(this.userImageHeight) // userImageHeight控制头像尺寸// userImageMarginTop和userImageMarginLeft控制头像在父容器内的位置.margin({ top: this.userImageMarginTop, left: this.userImageMarginLeft })Column() {...}.alignItems(HorizontalAlign.Start).opacity(this.userRowOpacity) // 控制Row组件的透明度}...}}
  1. 第三部分页面滚动通过Scroll组件实现,其中第二栏和第三栏相似,使用@Builder装饰器封装了两个自定义构建函数IconAndDescription和CustomRow,增加代码复用。源码参考SlideToHideAndDisplace
  // 自定义构建函数,将重复使用的UI元素抽象成一个方法。此处样式为:上方图标下方文字@BuilderIconAndDescription(icon: Resource, description: string | Resource, iconSize?: Size, radius?: number) {Column() {Image(icon).size(iconSize === undefined ? { height: $r('app.integer.icon_default_height'),width: $r('app.integer.icon_default_height') } : iconSize).borderRadius(radius)Text(description).margin({ top: $r('app.integer.margin_between_icon_and_description') })}}// 自定义构建函数。此处样式为:在Row组件中横向排列IconAndDescription@BuilderCustomRow(iconsAndDescriptions: IconAndDescription[]) {Row() {ForEach(iconsAndDescriptions, (item: IconAndDescription) => {this.IconAndDescription(item.icon, item.description)})}.width($r('app.string.size_full')).justifyContent(FlexAlign.SpaceAround).padding($r('app.integer.padding_small')).margin({ top: $r('app.integer.margin_small') }).backgroundColor($r('app.color.color_transparent_aa')).borderRadius($r('app.integer.border_radius'))}

高性能知识点

本例中Scroll组件绑定onScroll滚动事件回调,onScroll属于频繁回调,在回调中需要尽量减少耗时和冗余操作,例如减少不必要的日志打印。

工程结构&模块类型

   slidetohideanddisplace                                      // har包|---model|   |---Util.ets                         				   // 提供测试数据类     |---SlideToHideAndDisplace.ets                              // 滑动变化效果实现页面

模块依赖

不涉及。

参考资料

@State装饰器

@Builder装饰器

透明度设置

Scroll

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:https://qr21.cn/FV7h05

入门必看:https://qr21.cn/FV7h05
1.  应用开发导读(ArkTS)
2.  ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门:https://qr21.cn/FV7h05
1.  基本概念
2.  构建第一个ArkTS应用
3.  ……

开发基础知识:https://qr21.cn/FV7h05
1.  应用基础知识
2.  配置文件
3.  应用数据管理
4.  应用安全管理
5.  应用隐私保护
6.  三方应用调用管控机制
7.  资源分类与访问
8.  学习ArkTS语言
9.  ……

基于ArkTS 开发:https://qr21.cn/FV7h05
1.  Ability开发
2.  UI开发
3.  公共事件与通知
4.  窗口管理
5.  媒体
6.  安全
7.  网络与链接
8.  电话服务
9.  数据管理
10.  后台任务(Background Task)管理
11.  设备管理
12.  设备使用信息统计
13.  DFX
14.  国际化开发
15.  折叠屏系列
16.  ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django Web架构:全面掌握Django模型字段(上)

Django Web架构 全面掌握Django模型字段(上) - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article…

mysql的视图的基本概念

在视图上面可以创建视图 在MvSQL中,视图是虚表,不存储数据,能与基本表一起使用,可以嵌套,但不可创建索引。 视图和基本表: 视图是虚表,能对基本表和视图进行查询和更新操作,但只能对行列子集…

网络信息安全:nginx漏洞收集(升级至最新版本)

网络&信息安全:nginx漏洞收集(升级至最新版本) 一、风险详情1.1 nginx 越界写入漏洞(CVE-2022-41742)1.2 nginx 缓冲区错误漏洞(CVE-2022-41741)1.3 nginx 拒绝服务漏洞(CNVD-2018-22806) 二、nginx升级步骤 &…

前端每日一练:iframe 的优缺点及使用场景详解

iframe 的优缺点及使用场景详解 <iframe>&#xff08;内联框架&#xff09;是HTML中用于在当前页面中嵌入另一个页面的标签。它具有一系列优点和缺点&#xff0c;适用于不同的使用场景。 优点&#xff1a; 分离内容&#xff1a; <iframe> 允许将不同来源或不同内…

每日一练 | 华为认证真题练习Day194

1、下面是路由器Huawei的部分输出配置&#xff0c;关于该部分配置描迷正确的是: [huawei] bgp 100 [huawei-bgp]peer 12.12.12.2 ip-prefix P1 export [huawei]ip-prefix P1 index 5 deny 10.0.0.0 0 greater-equal 8 less-equal 32 [huawei]ip-prefix P1 index 5 deny 172…

高性能服务系列【五】进程

前面讲线程时&#xff0c;提到协程&#xff0c;有朋友问他们之间的差别。虽然我们的重点是从性能角度来展开分析&#xff0c;但这三个概念出现的关键点其实也是性能驱动的。早期&#xff0c;操作系统通过多进程实现多用户分享处理器时间片。在进程内部&#xff0c;如果有慢速的…

Python中科学技术法的表示方法

在Python中&#xff0c;可以使用字符串格式化的方法来表示科学计数法。具体做法是使用{:e}或{:E}作为占位符&#xff0c;其中e表示小写科学计数法&#xff0c;E表示大写科学计数法&#xff0c;通常用来代表"乘以10的幂"。例如&#xff1a; num 1234567890 formatte…

Vue开发环境构建

相关依赖 1.安装Node https://nodejs.org/en/ 验证是否安装 λ node -v v20.10.0 2.安装cnpm镜像 npm install -g cnpm --registryhttps://registry.npm.taobao.org 3.webpack:构建工具 4.开发工具vscode 安装插件&#xff1a;扩展-搜索vetur,vscode-icon,chinese, 搭…

上门预约平台有哪些优势和特点

在着手开发之前&#xff0c;市场调研是不可或缺的步骤。它能帮助我们深入了解当前上门按摩市场的供需状况及竞争态势&#xff0c;进而挖掘潜在用户的真实需求和期望。这些宝贵的信息将成为我们塑造产品特性和锁定目标用户群体的关键。 紧接着&#xff0c;根据市场调研的反馈&am…

Java | Java的输入与输出

文章目录 Java输出1、System.out.println()2、System.out.printf()3、System.out.print() Java输入1、使用Scanner类的对象获取输入&#xff08;1&#xff09;一般类型输入&#xff08;2&#xff09;字符串类型输入&#xff08;3&#xff09;char类型输入 2、使用System.in.rea…

鸿蒙NEXT实战开发:【截屏】

展示全屏截图和屏幕局部截图。通过[screenshot]模块实现屏幕截图 &#xff0c;通过[window]模块实现隐私窗口切换&#xff0c;通过[display]模块查询当前隐私窗口。 效果预览 全屏截图局部截图选择区域局部截图 使用说明&#xff1a; 点击右上角图标打开弹窗&#xff0c;选…

插件和依赖的区别

在 Maven 项目中&#xff0c;pom.xml 配置文件中的插件&#xff08;Plugin&#xff09;和依赖&#xff08;Dependency&#xff09;的区别&#xff1a; 插件&#xff08;Plugin&#xff09;&#xff1a; 插件是用来扩展 Maven 构建过程的工具&#xff0c;可以执行各种任务&…

江苏某机场多座超高端智慧公厕上线

作为行业信息化程度最高的智慧机场综合管理系统&#xff0c;能为旅客、航空公司以及机场自身的业务管理提供及时、准确、系统、完整的信息服务&#xff0c;达到信息高度统一、共享、调度严密、管理先进和服务优质的目的。而其中的智慧卫生间建设&#xff0c;更是提升机场旅客服…

企业实施了MES管理系统,为什么还要做数据采集

随着信息技术的迅猛发展&#xff0c;企业对于生产管理的精细化、智能化需求日益增长。MES管理系统作为连接企业计划层与控制层的重要桥梁&#xff0c;已经成为现代制造业不可或缺的核心系统。然而&#xff0c;尽管企业实施了MES管理系统&#xff0c;数据采集工作仍然不可或缺。…

Vue源码系列讲解——过滤器篇【一】(用法回顾)

目录 1. 前言 2. 用法回顾 2.1 使用方式 2.2 过滤器的定义 2.3 串联过滤器 3. 小结 1. 前言 过滤器在我们日常开发中应该算是一个非常常用的功能了&#xff0c;它经常会被用来格式化模板中的文本。过滤器可以单个使用&#xff0c;也可以多个串联一起使用&#xff0c;还可…

为什么最近黄金回收如此火爆?

龙行龘龘&#xff01;龙年不仅买金热&#xff0c;卖金也大热。近来&#xff0c;黄金回收行业异军突起&#xff0c;成为了市场上的热门话题。无论是街头巷尾的小店&#xff0c;还是网络上的各大平台&#xff0c;黄金回收的广告和宣传都屡见不鲜。那么&#xff0c;为什么最近黄金…

Prometheus Kube-Proxy endpoint connection refused

问题 Kube-Proxy endpoint connection refused 解决方法&#xff1a; $ kubectl edit cm/kube-proxy -n kube-system ## Change frommetricsBindAddress: 127.0.0.1:10249 ### <--- Too secure ## Change tometricsBindAddress: 0.0.0.0:10249 $ kubectl delete pod -l …

python代码性能分析

基准测试可以发现程序变慢了&#xff0c;那么是因为什么原因导致性能变慢的&#xff0c;需要进一步做代码性能分析。python同样提供了性能分析工具。 cProfile cProfile是python默认的性能分析器&#xff0c;他只测量CPU时间&#xff0c;并不关心内存消耗和其他与内存相关联的…

操作教程|使用MeterSphere对恒生UFX系统进行压力测试

恒生UFX&#xff08;United Finance Exchange&#xff0c;统一金融交换&#xff09;系统&#xff08;以下简称为“UFX系统”&#xff09;&#xff0c;是一款帮助证券公司统一管理外部接入客户的系统&#xff0c;该系统整体上覆盖了期货、证券、基金、银行、信托、海外业务等各类…

size_t 和double相乘怎么转换size_t

在C中&#xff0c;size_t和double可以直接相乘&#xff0c;结果会自动转换为double类型。如果你想要得到的结果是size_t类型&#xff0c;你需要进行显式类型转换。但是要注意&#xff0c;double转size_t可能会丢失小数部分&#xff0c;只保留整数部分。 以下是一个例子&#x…