Unity 超级列表SuperScrollview使用Demo

编程入门 行业动态 更新时间:2024-10-09 08:34:24

Unity  超级<a href=https://www.elefans.com/category/jswz/34/1771047.html style=列表SuperScrollview使用Demo"/>

Unity 超级列表SuperScrollview使用Demo

首先,说一下使用SuperScrollview的基本配置:

创建一个scroll view,然后把横纵滑动条设置可配置的,然后再加上Loop List View2代码,如下:

然后我们创建四个代码类:

1、数据类:

2、数据管理类方便增删查改:

public class StudentInfoMgr
{List<StudentInfo> mItemDataList = new List<StudentInfo>();public StudentInfoMgr() { }public StudentInfoMgr(List<StudentInfo> students){mItemDataList.Clear();mItemDataList = students;}/// <summary>/// 获取数据总数量/// </summary>public int TotalItemCount{get{return mItemDataList.Count;}}/// <summary>/// data数据/// </summary>public List<StudentInfo> MItemDataList{get{return mItemDataList;}set{mItemDataList = value;}}/// <summary>/// 查找指定数据/// </summary>/// <param name="index"></param>/// <returns></returns>public StudentInfo FindInfoByIndex(int index){if (index < 0 || index >= mItemDataList.Count){return null;}return mItemDataList[index];}/// <summary>/// 查找指定数据/// </summary>/// <param name="itemId"></param>/// <returns></returns>public StudentInfo FindInfoById(string itemId){int count = mItemDataList.Count;for (int i = 0; i < count; ++i){if (mItemDataList[i].id == itemId){return mItemDataList[i];}}return null;}/// <summary>/// 添加一组数据/// </summary>/// <param name="itemId"></param>/// <returns></returns>public void AddOrUpdateInfo(StudentInfo item){var student = FindInfoById(item.id);if (student == null){mItemDataList.Add(item);}else{student = item;}}/// <summary>/// 添加多组数据/// </summary>/// <param name="itemId"></param>/// <returns></returns>public void AddOrUpdateInfo(List<StudentInfo> items){if (items.Count<= 0) return;foreach (var info in items){var student = FindInfoById(info.id);if (student == null){mItemDataList.Add(info);}else{student = info;}}}/// <summary>///删除一组数据/// </summary>/// <param name="itemId"></param>/// <returns></returns>public void RemoveInfo(StudentInfo item){var student = FindInfoById(item.id);if (student == null) return;mItemDataList.Remove(student);}/// <summary>///删除一组数据/// </summary>/// <param name="itemId"></param>/// <returns></returns>public void RemoveInfo(string  id){var student = FindInfoById(id);if (student == null) return;mItemDataList.Remove(student);}/// <summary>///删除所有数据/// </summary>/// <param name="itemId"></param>/// <returns></returns>public void RemoveInfos(){if (mItemDataList.Count<=0) return;mItemDataList.Clear();}
}

3、单条数据显示类:

public class ItemStudentInfo : MonoBehaviour,IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
{/// <summary>/// 实现点击事件/// </summary>public Action<ItemStudentInfo> OnClick;/// <summary>/// 实现点击事件/// </summary>public Action<ItemStudentInfo> OnEnter;/// <summary>/// 实现点击事件/// </summary>public Action<ItemStudentInfo> OnExit;private StudentInfo info;private int index;[SerializeField]private RectTransform item;public void Init(StudentInfo info,int index){this.info = info;this.index = index;InitData();}private void InitData(){item.GetChild(0).GetComponent<Text>().text = info.id;item.GetChild(1).GetComponent<Text>().text = info.name;item.GetChild(2).GetComponent<Text>().text = info.age;item.GetChild(3).GetComponent<Text>().text = info.grade;item.GetChild(4).GetComponent<Text>().text = info.score;}void IPointerClickHandler.OnPointerClick(PointerEventData eventData){if(this.gameObject!=null) OnClick(this);}void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData){if (this.gameObject != null) OnEnter(this);}void IPointerExitHandler.OnPointerExit(PointerEventData eventData){if (this.gameObject != null) OnExit(this);}
}

4、整体UI显示类:

public class UI_StudentInfo : MonoBehaviour {public LoopListView2 mLoopListView;public RectTransform Content;private List<StudentInfo> studentInfos = new List<StudentInfo>();private StudentInfoMgr infoMgr;// Use this for initializationvoid Start () {for (int i=0;i<100;i++){StudentInfo student = new StudentInfo{id = (i + 100).ToString(),name = "zhang" + i,age = (i + 1).ToString(),grade = "十一班",score = i.ToString(),};studentInfos.Add(student);}InitListView();}private void InitListView(){infoMgr = new StudentInfoMgr(studentInfos);Debug.Log(infoMgr.TotalItemCount);mLoopListView.InitListView(infoMgr.TotalItemCount, OmGetItemByIndex);mLoopListView.MovePanelToItemIndex(infoMgr.TotalItemCount, 0);}private LoopListViewItem2 OmGetItemByIndex(LoopListView2 loopView, int index){if (index < 0 || index > infoMgr.TotalItemCount){return null;}var info = infoMgr.FindInfoByIndex(index);if (info == null){return null;}/*2018.11以后MonoBehaviour不能  new  直接赋值就可*/// LoopListViewItem2 item = new LoopListViewItem2();var item = loopView.NewListViewItem("Item_SuperPrefab");var itemInfo = item.GetComponent<ItemStudentInfo>();itemInfo.Init(info,index);itemInfo.OnClick += OnClick;itemInfo.OnEnter += OnEnter;itemInfo.OnExit += OnExit;return item;}private void  OnClick(ItemStudentInfo item){Debug.Log("点击!!");}private void OnEnter(ItemStudentInfo item){Debug.Log("移入!!");item.GetComponent<Image>().color = Color.clear;}private void OnExit(ItemStudentInfo item){Debug.Log("移出!!");item.GetComponent<Image>().color =new Color(1,1,1,130/255f);}
}

这里基本成了,最核心的代码:

基本原理就是利用对象池,做重复利用。

注意:初始化函数LoopListViewItem2.InitListView(lineLossMgr.TotalCount, OmGetItemByIndex)只能调用一次,如果想重置数据,只需要改变数据管理类中的数据(List<StudentInfo> ),然后LoopListViewItem2中的   loopListView2.RefreshAllShownItem();刷新一下即可。

显示效果如下:

 

更多推荐

Unity 超级列表SuperScrollview使用Demo

本文发布于:2024-02-06 04:18:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746333.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:列表   Unity   Demo   SuperScrollview

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!