• 实现一个简单实用的动态加载上千条目的UGUI模块


    一、简要介绍

    1、先看实现效果:

    实现一个简单实用的动态加载上千条目的UGUI模块
    2、主要功能:将数据保存的一个list中,将部分数据进行展示。动态生成最小item数据的指定倍数据的列表,拖动时,可动态创建
    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;
                }
            }
        }
    )
  • 相关阅读:
    go语言的垮平台编译
    vscode使用技巧
    集合
    泛型
    异常
    Java垃圾回收机制
    java学习笔记9.20
    java变量类型
    目前的学习计划
    离第一篇博客三天
  • 原文地址:https://www.cnblogs.com/timesdaughter/p/6764126.html
Copyright © 2020-2023  润新知