0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙ListContainer粘性头部装饰器组件

OpenHarmony技术社区 来源:HarmonyOS技术社区 作者:开鸿HarmonyOS 2021-10-19 09:06 次阅读

这是一个 ListContainer 的粘性头部装饰器组件,主要用于展示列表+粘性头部的滑动效果。

原理解析

UI 显示部分如下图所示,基础布局采用 TabList+PageSlider 联动,实现翻页滑动效果,TabList 实现 page 页 title 自定义显示,PageSlider 通过加载不同的布局显示对应滑动列表。

单个 page 页面中采用 ListContainer+Text,header 头部是使用悬停的 Text 控件来显示的,根据需要显示的头部类型来加载 Text 控件数量。

这里需要注意:HarmonyOS SDK 6 及之前版本仍不支持 PageSlider 添加 Fraction,故采用 PageSlider 添加 ComponentContainer 方式实现相似效果。

滑动处理逻辑如下:

  • 首先在滑动监听接口中通过获取触摸点 Y 坐标值 point.getY() 来判断上下滑动方向。

  • 通过 Header 头部类型判断需要执行的代码逻辑,仅在需要更新 herader 头部显示时添加移动动画效果。

不同 header 头部类型滑动事件的处理思路是一样的,单头部 StickyHeader 逻辑如下:

  • 假设 herader 头部高度为 Y,列表单个 Item 高度为 Y,当触发列表向上滚动且当前列表显示在屏幕中的第二个 Item 是新的 Header 数据时,开始对 Text 控件执行向上滑动的动画效果。

  • 当触发列表向下滚动且当前列表显示在屏幕中的第一个 Item 是新的 Header 数据时,开始对 Text 控件执行向下滑动的动画效果。在滑动过程中,通过获取指定 Item.getTop() 与 Header 头部高度 Y 的差值。

  • 确定 Text 控件每次需要移动的 Y 轴坐标 moveY,该区间值 moveY 是 0 到 -Y 之间。最后通过调用 setContentPositionY() 方法实现控件滑动动画。

使用说明

Java 调用示例:

使用1:
//获取ListContainer
ListContainerlistContainer=(ListContainer)rootView.findComponentById(ResourceTable.Id_list_double_inline);
//需要的数据
ListdataList=Utils.getDoubleInlineList();
listContainer.setItemProvider(newInlineDoubleHeaderTestAdapter(context,dataList));
//将TextListContainer列表与HeaderDecor进行绑定
HeaderDecorheaderDecor=newHeaderDecor(listContainer,headerText,doubleText);
//headerDecor调用setDataList()方法即可
headerDecor.setDataList(dataList);

使用2:
Texttext=(Text)rootView.findComponentById(ResourceTable.Id_title_text);
//获取ListContainer
ListContainerlistContainer=(ListContainer)rootView.findComponentById(ResourceTable.Id_list_sticky_inline);
//需要的数据
ListdataList=Utils.getStickyInlineList();
listContainer.setItemProvider(newInlineStickyTestAdapter(context,dataList));
//将TextListContainer列表与HeaderDecor进行绑定
HeaderDecorheaderDecor=newHeaderDecor(listContainer,text);
//headerDecor调用setDataList()方法即可
headerDecor.setDataList(dataList);

该三方库目前已经在 gitee 上开源并且发布 lib 仓库,可以在 moudle 级别下的 build.gradle 文件中添加依赖。

//添加maven仓库
repositories{
maven{
url'https://s01.oss.sonatype.org/content/repositories/releases/'
}
}

//添加依赖库
dependencies{
implementation'com.gitee.chinasoft_ohos1.0.0'
}

源码下载

以上就是 Header-Decor 的介绍,代码已经开源到header-decor,欢迎各位下载使用并提出宝贵意见!

https://gitee.com/chinasoft2_ohos/header-decor

责任编辑:haq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6742

    浏览量

    123194
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2634

    浏览量

    66221
  • HarmonyOS
    +关注

    关注

    79

    文章

    1967

    浏览量

    30025

原文标题:鸿蒙粘性头部装饰器组件,已开源!

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于鸿蒙Next模拟扫图识物的一个过程

    :’, JSON.stringify(err) ?? ‘’) }); }复制复制 六、代码结构及原理:1.整体结构: 使用了ArkTS的装饰语法,如@Entry和@Component。2.状态管理: 组件
    发表于 08-21 15:04

    鸿蒙基础组件:AlphabetIndexer

    可以与容器组件联动用于按逻辑结构快速定位容器显示区域的组件
    的头像 发表于 06-19 09:30 274次阅读
    <b class='flag-5'>鸿蒙</b>基础<b class='flag-5'>组件</b>:AlphabetIndexer

    HarmonyOS实战开发-深度探索与打造个性化自定义组件

    今天分享一下 什么是自定义组件?及其自定义组件的实战。 做过前端或者android开发的都知道自定义组件鸿蒙中显示在界面上的UI都称为组件
    发表于 05-08 16:30

    鸿蒙OS开发实例:【ArkTS类库多线程@Concurrent装饰校验并发函数】

    在使用TaskPool时,执行的并发函数需要使用该装饰修饰,否则无法通过相关校验。从API version 9开始,该装饰支持在ArkTS卡片中使用。
    的头像 发表于 04-02 14:45 596次阅读
    <b class='flag-5'>鸿蒙</b>OS开发实例:【ArkTS类库多线程@Concurrent<b class='flag-5'>装饰</b><b class='flag-5'>器</b>校验并发函数】

    鸿蒙OS开发实例:【装饰@Observed@ObjectLink】

    加深对@Observed@ObjectLink 装饰器使用的理解,以小故事做注释
    的头像 发表于 03-28 17:05 962次阅读
    <b class='flag-5'>鸿蒙</b>OS开发实例:【<b class='flag-5'>装饰</b><b class='flag-5'>器</b>@Observed@ObjectLink】

    鸿蒙原生应用开发-ArkTS语言基础类库多线程@Concurrent装饰校验并发函数

    在使用TaskPool时,执行的并发函数需要使用该装饰修饰,否则无法通过相关校验。从API version 9开始,该装饰支持在ArkTS卡片中使用。
    发表于 03-18 10:30

    那些杠鸿蒙的现在怎么样了?

    。去掉了传统的Linux内核以及AOSP等代码,减少了40%的冗余代码。 2、200家头部互联网大厂参与原生开发合作,并给开发者提供了高效的全链路开发工具,进一步加速鸿蒙原生应用开发。 3、鸿蒙校园
    发表于 02-16 22:03

    OpenHarmony父子组件单项同步使用:@Prop装饰

    @Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装饰的变量是可变的,但是变化不会同步回其父组件。 说明: 从API version 9开始,该
    的头像 发表于 02-03 10:57 388次阅读
    OpenHarmony父子<b class='flag-5'>组件</b>单项同步使用:@Prop<b class='flag-5'>装饰</b><b class='flag-5'>器</b>

    OpenHarmony 定义扩展组件样式:@Extend 装饰

    说明: 从 API version 9 开始,该装饰支持在 ArkTS 卡片中使用。 装饰器使用说明 语法   @Extend(UIComponentName) function
    的头像 发表于 02-01 20:53 259次阅读

    多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?

    鸿蒙生态迎「关键一战」,多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?
    的头像 发表于 01-24 11:47 540次阅读
    多家<b class='flag-5'>头部</b>企业宣布「启动<b class='flag-5'>鸿蒙</b>原生应用开发」,你看好<b class='flag-5'>鸿蒙</b>系统走向「独立」吗?

    鸿蒙开发教程-管理组件状态

    组件层级双向同步状态是指@Provide修饰的状态变量自动对提供者组件的所有后代组件可用,后代组件通过使用@Consume装饰的变量来获得
    的头像 发表于 01-22 21:46 1287次阅读
    <b class='flag-5'>鸿蒙</b>开发教程-管理<b class='flag-5'>组件</b>状态

    鸿蒙ArkUI开发-Tabs组件的使用

    鸿蒙ArkUI开发-Tabs组件的使用
    的头像 发表于 01-19 16:01 1773次阅读
    <b class='flag-5'>鸿蒙</b>ArkUI开发-Tabs<b class='flag-5'>组件</b>的使用

    鸿蒙开发-ArkUI 组件基础

    1 组件介绍 组件(Component)是界面搭建与显示的最小单位,HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件,我们可以使用这些组件轻松的编写出更加丰
    发表于 01-17 19:31

    鸿蒙开发OpenHarmony组件复用案例

    ,下面分享一张鸿蒙4.0的学习路线图 :(略缩版) 高清完整版可以在主页保存↓↓↓ (附文档鸿蒙4.0) 注意事项 @Reusable之前的装饰的名称为@Recycle,旧名称
    发表于 01-15 17:37

    鸿蒙开发基础-Web组件之cookie操作

    : CookieOperation.VERIFY_COOKIE, isNeedDivider: false }) } ... } ... 自定义组件LinkButton由Text组件和Divider分隔
    发表于 01-14 21:31