Unity 循环列表 EnhancedScroller
2023-09-11 14:19:57 时间
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.运行结果
相关文章
- android软件开发之webView.addJavascriptInterface循环渐进【一】
- 多控件焦点循环移动
- R语言For循环
- 循环列表的实现
- Python编程语言学习:列表与字典互转的几大方法集锦、从列表中按顺序循环抽走一个元素输出剩余元素之详细攻略
- Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略
- 一天学完spark的Scala基础语法教程教程三、循环结构(idea版本)
- 第64篇 QML 之 JS中的循环语句与跳转控制
- 【项目实战】Python实现循环神经网络SimpleRNN、LSTM进行淘宝商品评论情感分析(含爬虫程序)
- 内核通用链表-双向循环链表
- 循环viewpager
- [UnityUI]循环滑动列表
- Python语言基础学习之Python基础之列表介绍和循环遍历
- shell for循环及分号、括号使用
- python 垃圾回收——分代回收 和java有些区别 注意循环引用无法被回收
- 在多重循环中,如果有可能,应当将最长的循环放在最内层
- PDCA循环——快速提升软件质量的必备工具
- 递归与循环之间的较量,你看好谁
- 【Python】列表循环修改索引
- Python语言基础学习之Python基础之列表介绍和循环遍历