实现一个简单实用的动态加载上千条目的UGUI模块
一、简要介绍
1、先看实现效果:
3、提示:选择一次性加载出的条目数越多越平滑.
4、实现要求:win7/untiy5.0.0/一张图片/四个脚本
二、具体实现
1、新建一个Scroll View ,在其上挂一个DynamicScrollView脚本,用于实现动态的加载给定的数据
2、创建好一个Image,做好适配,在其下放置一个text,用于显示string类型的数据
3、找一个对象池的脚本,给它个预制体,可以生成对应的实例,进行变换时,可以暂时保存起来
4、写一个Test脚本,将一个在一个list写入几十条数据,并在开始时触发,将数据传入到ScrollView中,启动模块
注意:(如果不想用对象池,将demo中的下面两个方法替换掉
///
/// 创建出新的对象
///
///
///
///
private void CreateItems(int num ,bool first,bool add)
{
for (int i = 0; i < num; i++)
{
GameObject item = GetImageItem(first,add);
if (add)
{
//放置在尾部
item.GetComponentInChildren().text = (tail).ToString();
item.SendMessage("UpdateInfomation", itemList[tail++]);
item.transform.SetAsLastSibling();
scroll.content.localPosition -= cellhight * Vector3.up;
}
else {
//放置在头部
item.GetComponentInChildren().text = (--head).ToString();
item.SendMessage("UpdateInfomation", itemList[head]);
item.transform.SetAsFirstSibling();
scroll.content.localPosition += cellhight * Vector3.up;
}
}
}
GameObject GetImageItem(bool firstTime,bool add)
{
if (firstTime)
{
GameObject go = Instantiate(itemPfb);
go.transform.SetParent(parent, false);
if (add)
{
items.Add(go);
}
else {
items.Insert(0, go);
}
return go;
}
else {
if (add)
{
head++;
GameObject item = items[0];
items.Remove(item);
items.Add(item);
return item;
}
else {
tail--;
GameObject item = items[items.Count - 1];
items.Remove(item);
items.Insert(0, item);
return item;
}
}
}
)