Unity 循环列表 EnhancedScroller

1.界面搭建

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.代码编写

添加脚本,单元格数据模型。M。

public class CellData
{
    public int id;
    public string title;
    public string content;
}

添加脚本,单元格显示设置。V。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using EnhancedUI.EnhancedScroller;
using UnityEngine.UI;

public delegate void OnClickCellDelegate(int id);

public class CellView : EnhancedScrollerCellView
{
    private CellData _data;
    public Text _text;

    public OnClickCellDelegate onClickCellDelegate;

    public void SetData(CellData data)
    {
        _data = data;
        _text.text = data.title;
    }

    public void Cell_OnClick()
    {
        onClickCellDelegate?.Invoke(_data.id);
    }
}

添加脚本,滚动条管理器。C。

using System.Collections.Generic;
using UnityEngine;
using EnhancedUI.EnhancedScroller;
using UnityEngine.UI;

public class ScrollerManager : MonoBehaviour, IEnhancedScrollerDelegate 
{
    public EnhancedScroller m_Scroller;
    public CellView m_Cell;
    public Text m_Content;
    //public RectTransform m_RectTransform;

    private List<CellData> _data;

    void Start()
    {
        InitData();

        m_Scroller.Delegate = this;
        m_Scroller.ReloadData();
    }

    private void InitData()
    {
        _data = new List<CellData>();
        for (int i = 0; i < 100; i++)
        {
            _data.Add(new CellData()
            {
                id = i,
                title = "aaa-" + i.ToString(),
                content = "id:" + i.ToString()
            });
        }
    }

    public int GetNumberOfCells(EnhancedScroller scroller)
    {
        return _data.Count;
    }

    public float GetCellViewSize(EnhancedScroller scroller, int dataIndex)
    {
        return m_Cell.gameObject.GetComponent<RectTransform>().sizeDelta.y;
    }

    public EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex)
    {
        //创建一个单元格视图,或回收一个已经存在的单元格视图,参数为用于创建单元格视图的预制构件
        CellView cellView = scroller.GetCellView(m_Cell) as CellView;
        //将预制体显示
        cellView.gameObject.SetActive(true);
        //单元格的点击事件
        cellView.onClickCellDelegate = OnClickCell;
        //设置单元格的数据
        cellView.SetData(_data[dataIndex]);

        return cellView;
    }

    private void OnClickCell(int id)
    {
        m_Content.text = _data[id].content;
    }
}

3.API

3.1 EnhancedScrollerCellView 单元格

属性:
cellIdentifier — 单元格的标识符,在面板设置
int cellIndex — cell在cell view中的索引,如果列表是循环的,这将不同于dataIndex
int dataIndex — 在cellview中的索引位置
bool active — 单元格是存活(true)还是已回收

3.2 EnhancedScroller 列表滚动控制

回调:
cellViewWillRecycle(cellView) – cellView 被回收时触发
cellViewVisibilityChanged(cellView) – cellView显示发生改变时触发
scrollerScrolled(this, val, _scrollPosition) – 当滚动矩形滚动时,将调用此委托
…(查看EnhancedScroller.cs)

private void ResigerBtnEvent()
    {
        //跳转
        Btn_Top.onClick.AddListener(() => m_Scroller.JumpToDataIndex(0, 0, 0, true, EnhancedScroller.TweenType.easeOutQuint, 1.0f, ()=>Debug.Log("滚到顶部完成")));
        Btn_Bottom.onClick.AddListener(() => m_Scroller.JumpToDataIndex(_data.Count - 1, 0, 0, true, EnhancedScroller.TweenType.easeOutQuint, 1.0f, ()=>Debug.Log("滚到底部完成")));
        //刷新全部数据
        Btn_ReloadAll_1.onClick.AddListener(() => HandlerBtnReloadAll_1());
        Btn_ReloadAll_2.onClick.AddListener(() => HandlerBtnReloadAll_2());
    }

    //刷新全部数据,停留在当前位置
    private void HandlerBtnReloadAll_1()
    {
        _data.Clear();
        for(int i=1; i<50; i++)
        {
            _data.Add(new CellData()
            {
                id = i,
                title = "aaa-" + (i + 100).ToString(),
                content = "id:" + (i + 100).ToString()
            });
        }

        //m_Scroller.
        var scrollPosition = m_Scroller.ScrollPosition;
        m_Scroller.ReloadData();
        m_Scroller.ScrollPosition = scrollPosition;
    }

    //刷新全部数据,位置重头开始/位置到尾部
    private void HandlerBtnReloadAll_2()
    {
        _data.Clear();
        for(int i=1; i<50; i++)
        {
            _data.Add(new CellData()
            {
                id = i,
                title = "aaa-" + (i + 100).ToString(),
                content = "id:" + (i + 100).ToString()
            });
        }

        m_Scroller.ReloadData();    //刷新后停留在 头部, 默认是 0
        //m_Scroller.ReloadData(1);    //刷新后停留在 尾部, 默认是 0
    }

4.运行结果

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity EnhancedScroller 是一款优秀的 Unity 滚动列表组件,主要被应用于构建复杂的列表和表格。 EnhancedScroller 可以让用户轻松地实现高度优化的滚动列表。其底层使用的是 Unity 的 UI 系统,并支持全部 UI 组件。 EnhancedScroller 的主要特点包括动态行高、回收视图、快速滑动等。用户可以根据自己的需求轻松定制滚动列表。其强大的性能优化使得 EnhancedScroller 在大规模数据渲染时表现出色。 在 EnhancedScroller 的实现过程中,使用了虚拟化技术,只在可见区域内渲染列表项,不仅减少了绘制时间,也减少了内存占用和 GPU 负担。这样就可以在较低的设备上流畅地渲染大量列表项。 EnhancedScroller 的接口设计非常友好,开发者可以快速了解并掌握其使用方法。Unity 社区中也有许多示例和教程,帮助开发者更好地实现其功能。总之,Unity EnhancedScroller 是开发者在构建高效滚动列表时的首选组件之一,它的强大性能优化、易用性和接口设计都是其优势所在。 ### 回答2: Unity EnhancedScroller是一个Unity插件,它可以轻松地实现高性能可滚动列表。它是为了处理大量数据而设计的,而且其性能优秀。 使用EnhancedScroller,可以创建可动态填充的列表,它可以自动地将只需要的数据项加载到内存中,从而保证了性能的高效。 另外,EnhancedScroller还具有各种布局选项,使得使用者可以按照自己的需求对列表进行排列。从简单的线性列表到复杂的网格布局都可以轻松实现。 EnhancedScroller还支持自定义的单元格布局,因此可以根据应用程序的需求自由地设计单元块。可以方便得实现复杂的交互,例如滑动菜单,瀑布流布局等。 综上所述,Unity EnhancedScroller是一个强大的工具,可以有效地管理大量数据并创建高性能的滚动列表。无论是UI取景器还是游戏风格的界面,该插件都是一个非常实用的选择。 ### 回答3: Unity EnhancedScrollerUnity引擎中的一种插件,它提供了一种高效的滚动列表实现方式。与常规的滚动列表不同,EnhancedScroller使用视图重用技术以提高性能并降低内存使用量。EnhancedScroller允许开发人员为每个可见行指定不同的高度,从而消除了空白间隔造成的浪费。 此外,EnhancedScroller还提供了基于数据的填充模板,使开发人员能够在运行时快速增加或减少表格中的行数。EnhancedScroller支持水平和垂直滚动,并允许开发人员添加自定义行为和动画效果。EnhancedScroller还提供了可定制的用户界面组件,如滑块和分页指示器,以增强用户体验。 总而言之,Unity EnhancedScroller是一种高度优化的滚动列表实现方式,可以帮助开发人员轻松创建快速响应且易于管理的列表和网格视图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值