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
}