当前位置: 首页 > news >正文

【Unity】 HTFramework框架(六十五)ScrollList滚动数据列表

更新日期:2025年5月16日。
Github 仓库:https://github.com/SaiTingHu/HTFramework
Gitee 仓库:https://gitee.com/SaiTingHu/HTFramework

索引

  • 一、ScrollList滚动数据列表
  • 二、使用ScrollList
    • 1.快捷创建ScrollList
    • 2.ScrollList的属性
    • 3.自定义数据类
    • 4.自定义元素类
    • 5.修改元素模板
    • 6.新增数据
    • 7.删除数据
    • 8.更新数据
    • 9.清空数据

一、ScrollList滚动数据列表

首先,ScrollRect滚动区域视图还算是一个比较常用的组件,但他有如下缺点:

未直接面向数据层:ScrollRect通常用于显示多条数据,且在超出区域后提供视图滚动效果,但其未提供面向数据层的相关接口(如新增、修改、删除、显示等),就像一个白板一样,或者说Unity本身就保留了这一部分作为开发者的扩展空间。

如要实现一个展示多条数据的滚动列表,需要自行搭建UI组件、编写数据管理接口、维护数据增删逻辑、并同步与UI组件保持界面更新,这个过程虽然不难,但每次都这样来一遍还是相当浪费时间的,所以非常有必要将典型的滚动数据列表功能提炼出来,只需简单的配置,就能应对大多数常见的滚动数据列表功能,这就是ScrollList

二、使用ScrollList

1.快捷创建ScrollList

首先,在Hierarchy窗口点击鼠标右键,通过菜单HTFramework -> UI -> Scroll List快捷创建一个ScrollList组件:

在这里插入图片描述

ScrollList是针对ScrollRect的扩展,所以他看起来就跟一个ScrollRect一模一样:

在这里插入图片描述

2.ScrollList的属性

只不过ScrollList多出来了几个属性,以便于我们配置滚动数据列表

在这里插入图片描述

Element Template:数据元素模板,单条数据对应的在UI界面显示的元素的模板。
Scroll Direction:滚动方向。
First Position:第一条元素的位置。
Row Number:一行元素的数量,垂直滚动时,一行显示的元素超出此数量后将换到下一行,水平滚动时,一列显示的元素超出此数量后将换到下一列。
Spacing:元素间距,x为水平间距,y为垂直间距。

3.自定义数据类

首先,我们需要自定义数据类,并继承至ScrollListData,其作为单条数据对应的对象,比如这里的TestData

/// <summary>
/// 测试数据
/// </summary>
public class TestData : ScrollListData
{public string ID;public string Name;
}

4.自定义元素类

然后,还需要自定义元素类,并继承至ScrollListElement,其作为单条数据对应的在UI界面显示的元素,比如这里的TestElement

/// <summary>
/// 测试元素
/// </summary>
public class TestElement : ScrollListElement
{public Text Txt_Content;//更新数据时回调public override void UpdateData(){base.UpdateData();//获取对应的数据(也即是上文的 TestData)if (Data != null){//将 Name 显示到UI界面Txt_Content.text = Data.Cast<TestData>().Name;}}
}

5.修改元素模板

将自定义元素类TestElement挂到元素模板上:

在这里插入图片描述

并根据自己的需求修改元素模板

在这里插入图片描述

比如我这里将元素的单行上限设置为3,也即是每排满3个元素便换下一行。

6.新增数据

至此,我们便可以直接像操作数据一样操作这个ScrollList了,比如新增数据:

            //新增一条数据scrollList.AddData(new TestData() { Name = "张三" });scrollList.AddData(new TestData() { Name = "李四" });scrollList.AddData(new TestData() { Name = "王五" });scrollList.AddData(new TestData() { Name = "赵六" });scrollList.AddData(new TestData() { Name = "宋七" });//新增多条数据List<TestData> datas = new List<TestData>();scrollList.AddDatas(datas);

只需调用新增数据接口就行了,UI元素会自动生成,不用关心如何维护数据、何时创建UI元素、何时删除UI元素等。

在这里插入图片描述

7.删除数据

            //新增一条数据TestData testData = new TestData() { Name = "张三" };scrollList.AddData(testData);scrollList.AddData(new TestData() { Name = "李四" });scrollList.AddData(new TestData() { Name = "王五" });scrollList.AddData(new TestData() { Name = "赵六" });scrollList.AddData(new TestData() { Name = "宋七" });//删除一条数据(张三)scrollList.RemoveData(testData);

在这里插入图片描述

8.更新数据

            //新增一条数据TestData testData = new TestData() { Name = "张三" };scrollList.AddData(testData);scrollList.AddData(new TestData() { Name = "李四" });scrollList.AddData(new TestData() { Name = "王五" });scrollList.AddData(new TestData() { Name = "赵六" });scrollList.AddData(new TestData() { Name = "宋七" });//数据发生了改变,更新数据testData.Name = "张三三三";scrollList[testData].UpdateData();

在这里插入图片描述

9.清空数据

            //清空数据scrollList.ClearData();

清空数据后,所有UI元素会被对象池自动回收,基于对象池的控制,所以即便是频繁的增、删、改数据操作也不会产生性能瓶颈。

当然,这里只是介绍了一些基础操作,其他更多的信息请参阅源码。

http://www.xdnf.cn/news/478639.html

相关文章:

  • 图像锐化调整
  • <PLC><视觉><机器人>基于海康威视视觉检测和UR机械臂,如何实现N点标定?
  • 使用seatunnel同步磐维数据库数据
  • 【全网首发】解决coze工作流批量上传excel数据文档数据重复的问题
  • 图像分割(0)初步认识
  • 高光谱遥感图像处理之数据分类的fcm算法
  • K8s CoreDNS 核心知识点总结
  • 捌拾伍- 量子傅里叶变换 (3)
  • 【目标检测】RT-DETR
  • 智脑进化:神经网络如何从单层感知机迈向深度学习新纪元
  • 动态规划(2):问题建模与状态设计
  • 求职困境:开发、AI、运维、自动化
  • 序列dp常见思路总结
  • RabbitMQ 消息模式实战:从简单队列到复杂路由(四)
  • 卡顿检测与 Choreographer 原理
  • Java大师成长计划之第24天:Spring生态与微服务架构之分布式配置与API网关
  • window 显示驱动开发-使用有保证的协定 DMA 缓冲区模型
  • 论信息系统项目的范围管理
  • 后端框架(3):Spring(2)
  • Gitee DevOps:中国企业数字化转型的“本土化加速器“
  • Ubuntu 更改 Nginx 版本
  • PCIE接收端检测机制分析
  • 源码:处理文件格式和字符集的相关代码(3-3)
  • Qt图表绘制(QtCharts)- 性能优化(13)
  • 关于Redisson分布式锁的用法
  • TRTC实时对话式AI解决方案,助力人机语音交互极致体验
  • Python 编程技巧 @ 玩转 For 循环
  • Linux `ps` 命令深度解析与高阶应用指南
  • 简单介绍C++中线性代数运算库Eigen
  • 【未完】【GNN笔记】EvolveGCN:Evolving Graph Convolutional Networks for Dynamics Graphs