鸿蒙HarmonyOS 5.0开发实战:长列表滑动到指定列表项动效实现案例

article/2025/7/19 8:57:29

 往期鸿蒙5.0全套实战文章必看:(文中附带鸿蒙5.0全栈学习资料)

  • 鸿蒙开发核心知识点,看这篇文章就够了

  • 最新版!鸿蒙HarmonyOS Next应用开发实战学习路线

  • 鸿蒙HarmonyOS NEXT开发技术最全学习路线指南

  • 鸿蒙应用开发实战项目,看这一篇文章就够了(部分项目附源码)


长列表滑动到指定列表项动效实现案例

介绍

在长列表场景时,当用户在浏览过程中打断时,列表会从第一项开始重新加载,此时我们使用scrollToIndex跳转到某个列表项时,当开启smooth动效时,会对经过的所有item进行加载和布局计算,当大量加载item时会导致性能问题,影响用户体验。因此我们使用currentOffset方法获取并记录偏移量,然后使用scrollTo方法跳转到上次浏览记录功能,可以流畅滑动到上次列表的位置。

效果图预览

使用说明

  1. 进入页面,第一次点击跳转到上次浏览记录,由于第一次没有记录,所以滑动到固定1000vp的位置。
  2. 此时按钮变成跳转到顶部,再次点击按钮,列表滑动到顶部,并同时记录上一次的位置坐标。
  3. 此时按钮变回为跳转到上次浏览记录,点击按钮,观察到列表流畅滑动到上次浏览位置。

实现思路

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

  1. 使用LazyForEach+cachedCount+@Reusable实现懒加载列表,并且缓存附近组件。

    List({ space: ListConstants.LIST_SPACE, scroller: this.listScroller }) {LazyForEach(momentData, (moment: FriendMoment) => {ListItem() {OneMoment({ moment: moment })}
    }, (moment: FriendMoment) => moment.id)
    }
    .cachedCount(this.cachedCountNumber)
    .width($r('app.string.list_slide_to_history_layout_100'))
    .height($r('app.string.list_slide_to_history_layout_100'))
    .listDirection(Axis.Vertical)
    .divider({strokeWidth: $r('app.integer.list_slide_to_history_divider_width'),color: $r('app.color.list_slide_to_history_divider_color'),startMargin: $r('app.integer.list_slide_to_history_list_divider_margin'),endMargin: $r('app.integer.list_slide_to_history_list_divider_margin')
    })
    .onScrollIndex((first: number) => {this.firstIndex = first;
    })
    
  2. 在页面返回/退出等需要历史记录的地方,使用currentOffset方法来获取当前偏移量并存储到本地,本例在跳转到Top时将偏移量记录到成员变量historyOffset中。

    this.historyOffset = this.listScroller.currentOffset().yOffset;
    
  3. 在跳转时,使用scrollTo+animation动画实现列表滑动。

    this.listScroller.scrollTo({xOffset: 0,yOffset: this.historyOffset === 0 ? this.DEFAULT_OFFSET : this.historyOffset,animation: { duration: this.ANIMATION_DURATION, curve: Curve.LinearOutSlowIn }
    })
    

高性能知识点

  1. 参考了长列表加载性能优化,使用了里面的LazyForEach+cacheCount+@Reusable实现长列表不卡顿滑动。
  2. 参考了Scroller,使用了currentOffset计算偏移量和scrollTo+animation动效流畅滑动来代替scrollToIndex,因为scrollToIndex在长列表场景开启smooth动效时会导致卡顿。

工程结构&模块类型

   listslidetohistory               // har包|---constants                    |   |---ListConstants            // 列表常量|---model                        |   |---BasicDataSource          // 列表LazyForEach数据类 + 图文数据类|---view             |   |---components            |   |   |---ImageText            // 图标+文字组件|   |   |---OneMoment            // 列表内图文混排组件|   |---ListSlideToHistory       // 附近的人列表


http://www.hkcw.cn/article/NvjtiLSuRV.shtml

相关文章

【HarmonyOS 5】App Linking 应用间跳转详解

目录 什么是 App Linking 使用场景 工作原理 如何开发 1.开通 App Linking 2.确定域名 3.服务端部署 applinking.json 文件 4.AGC绑定域名 5.项目配置 6.组装聚合链接 7.解析聚合链接中的参数 其他 如何获取应用ID 如何在应用未安装时点击链接跳转至应用市场 什…

HarmonyOS Next 用户通知服务Notification Kit介绍与实战

1、用户通知服务Notification Kit介绍 Notification Kit(用户通知服务)为开发者提供本地通知发布通道,开发者可借助Notification Kit将应用产生的通知直接在客户端本地推送给用户,本地通知根据通知类型及发布场景会产生对应的铃声…

HarmonyOS NEXT(九) :图形渲染体系

HarmonyOS NEXT(九) :图形渲染体系 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 HarmonyOS NEXT&#xff0…

Harmony生态适配:第三方库版本与系统版本的兼容管理

注:适用版本(Harmony OS NEXT / 5.0 / API 12 ) 鸿蒙文档给出该问题的解决方法的参考文档 安装HAP时提示“compatibleSdkVersion and releaseType of the app do not match the apiVersion and releaseType on the device.”-应用调试-DevEc…

鸿蒙心路旅程:HarmonyOS NEXT 心路旅程:技术、成长与未来

HarmonyOS NEXT 心路旅程:技术、成长与未来 技术的浪潮中,总有一些瞬间让人感到心潮澎湃。作为一名HarmonyOS NEXT开发者,我有幸成为这个时代科技创新的一部分。从最初的接触到深入学习、开发,以及如今规划未来的职业方向&#x…

知网研学原生鸿蒙版正式上线,打造AI学术服务的“超强大脑”

为更好地满足数智时代多元化学习场景的需求,给广大鸿蒙系统用户提供更加便捷智能的学习体验,知网研学鸿蒙原生应用版本(HarmonyOS版)正式上线,不仅为鸿蒙生态注入了强大的知识服务力量,也为近2000万知网研学…

【鸿蒙设备开发】OpenHarmony 轻量系统内核(LiteOS-M)【内核通信机制】

📌往期推文全新看点(文中附带最新鸿蒙全栈学习笔记) ①📖 鸿蒙应用开发与鸿蒙系统开发哪个更有前景? ②📖嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~ ③📖 对于大前端…

【鸿蒙OH 5.0】OpenHarmony标准系统方案之瑞芯微RK3568移植案例(一)

📝往期推文全新看点(文中附带最新鸿蒙全栈学习笔记) 🚩 鸿蒙(HarmonyOS)北向开发知识点记录~ 🚩 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 🚩 鸿蒙应用…

【错误记录】Windows 中 DevEco Studio 真机调试无法连接设备 ( 低版本的 HarmonyOS 4.2.0 华为手机无法在 DevEco Studio 5.0.2 上真机调试 )

文章目录 一、错误记录二、问题排查三、解决方案 参考文档 : hdc(HarmonyOS Device Connector)文档设备连接后,无法识别设备的处理指导真机调试流程 一、错误记录 手机 使用的是 HarmonyOS 4.2.0 系统 ; 使用 HarmonyOS 的 hdc 工具 , 执行 …

原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验

文章目录 引言一、鸿蒙原生应用的高效开发二、用户隐私保护:安全访问管理三、开发者实用工具:应用分析与A/B测试四、应用审核与分发:快速上线4.1 应用加密:保护代码安全4.2 自动化测试与检测前移:提升应用质量 五、结语…

迪士尼打架是否互殴还需细心调查 因拍照起争执

5月31日,有网友发布视频称,在上海迪士尼发生了一起冲突事件,一对情侣和一家三口发生了争执并动手。视频中可以看到双方在现场扭打,周围的人纷纷上前劝阻。6月1日,当地相关部门透露,这起事件发生在5月31日下午,地点是迪士尼疯狂动物城的一处拍照打卡点。双方因拍照问题产…

从奥运会到法网,郑钦文在“福地”取得跨年10连胜! 职业生涯首进法网八强

郑钦文在法网比赛中首次跻身八强,这是她第四次闯进大满贯八强。她在罗兰加洛斯取得了个人10连胜,也是中国选手时隔14年再次进入法网八强。比赛结束后,郑钦文躺倒在地庆祝这场历时2小时47分钟的胜利。比赛从首盘开始便陷入胶着,郑钦文与萨姆索诺娃展开了一场发球与接发球大战…

没有假球全是世仇 比赛第一,友谊第十四

“友谊第一,比赛第二”这句话在江苏省首届城市足球联赛中被玩出了新花样。“友谊第一,比赛第十四!”这样的口号让观众们捧腹大笑。这个被称为“苏超”的足球联赛最近爆火出圈,盐城现场吸引了22613名观众,网友纷纷表示这上座率堪比世界杯。“苏超”的观众数量已经超过了同期…

陈梦9岁开始领工资 妈妈管理至今

在最新一期《是女儿是妈妈》节目中,陈梦妈妈的一番话引起了网友们的广泛关注。陈梦9岁进入省队就开始领工资,而她的工资卡至今仍由妈妈保管。此外,陈梦妈妈还提到,陈梦每天的日常生活除了训练、吃饭和睡觉外,几乎没有其他时间,更没有精力去谈恋爱。陈梦是一位乒乓球世界冠…

记录下载安装sqlite3的过程

sqlite是一个数据库管理软件,今天用到了,记录下载安装的过程。 本地环境:Windows 10 家庭中文版。 下载网址:SQLite Download Page (一)下载下图中的两个文件: (二)自…

HarmonyOS NEXT 鸿蒙ArkTS 视频相关 视频播放、直播视频、XComponent和typeNode多方案实现画中画功能开发

一、简单的视频播放、直播播放 1. 使用meida中的avPlayer结合XComponent进行视频播放 如果是音频只需要一个路径就差不多了,这是音频HDI显示HDI,所以需要做以下几点: 应用从XComponent组件获取窗口SurfaceID,获取方式参考XCompon…

res-downloader-视频号下载,网络视频资源嗅探下载器

适用系统:Windows(含Win7)、macOS 和 Linux 系统 一、核心功能与特性 全平台资源支持 支持微信视频号、抖音、快手、小红书等短视频平台的无水印视频下载,同时兼容酷狗音乐、QQ音乐、微信小程序等音频和多媒体资源 1 8。覆盖视频、音频、图片、m3u8流媒体…

通义万相2.1:开启视频生成新时代

文章摘要:通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具,它通过核心技术的升级和创新,为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…

计算机视觉——基于树莓派的YOLO11模型优化与实时目标检测、跟踪及计数的实践

概述 设想一下,你在多地拥有多个仓库,要同时监控每个仓库的实时状况,这对于时间和精力而言,都构成了一项艰巨挑战。从成本和可靠性的层面考量,大规模部署计算设备也并非可行之策。一方面,大量计算设备的购…

AI赋能视频创作:蓝耘MaaS与海螺AI技术的深度融合

云边有个稻草人-CSDN博客 目录 一、蓝耘MaaS平台概述 (1)平台的模块化设计 (2)蓝耘MaaS的灵活性与扩展性 (3)蓝耘MaaS的安全性与隐私保护 二、海螺AI视频模型简介 (1)海螺AI的…