unity fairygui 列表第一次滑动先展开

unity fairygui 列表展开效果

简单记录一下
列表第一次滑动,先展开(高度从100 变到300)再滑动

为了避免列表滑动后显示的组件不完整,勾选此按钮在这里插入图片描述

效果

这是组件代码,内容比较简单

using System;
using FairyGUI;
using FairyGUI.Utils;
using BCore;
using UnityEditor;

public class ListFrame : GComponent
{
    private GList list;
    private bool listOpen;
    private bool listHide;

	public override void ConstructFromXML(XML xml)
    {
        base.ConstructFromXML(xml);
        list = GetChild("list").asList;
        list.scrollPane.onScroll.Add(UpdaeListHeightUp);
        list.scrollPane.onPullDownRelease.Add(UpdateListHeightDown);
        //list.onClick.Add(UpdaeListHeight);
    }

	
	public void OnShow()
	{
        listOpen = false;
        listHide = false;
        list.height = 100;      //  默认高度
        UpdateList();
    }

	public void OnHide()
    {
        BEventMgr.I.removeAllEvent(this);
        list.RemoveChildrenToPool();
    }

    private void UpdateList()
    {
        for(int i = 0; i < 15; i++)
        {
            var cell = list.AddItemFromPool().asCom;
            //  设置该组件信息
        }
    }

    //  如果是下滑
    private void UpdateListHeightDown()
    {
        if (list.height > 150 && list.scrollPane.scrollingPosY <= 0 && !listHide)
        {
            listHide = true;
            listOpen = false;
            NumRoll.I.StartChangeListHeight(list, list.height, 150, 0.5f);
        }
    }

    //  如果是上滑
    private void UpdaeListHeightUp()
    {
        if (list.height < 500 && list.scrollPane.scrollingPosY > 0 && !listOpen) 
        {
            listOpen = true;
            listHide = false;
            NumRoll.I.StartChangeListHeight(list, list.height, 500, 0.5f);
        } 
    }
}

这是使用的协程方法

  private IEnumerator UpdateListHeight(GList list, float startNum, float endNum,float time)
    {
        float interval = time / 30;
        DateTime beginTime = DateTime.Now;
        DateTime endTime = DateTime.Now.AddSeconds(time);
        double delta;
        while (true)
        {
            if(DateTime.Now >= endTime)
            {
                list.height = endNum;
                break;
            }
            delta = (DateTime.Now - beginTime).TotalSeconds;
            float currTime = (float)delta / time;
            float currNum = Mathf.Lerp(startNum, endNum, currTime);
            list.height = currNum;
            yield return new WaitForSeconds(interval);
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity中的滑动列表复用是一种优化技术,它的主要目的是在滑动列表时减少消耗,提高性能。当一个列表包含大量的元素时,正常的做法是将所有的元素都实例化并显示在列表上,这样无疑会占用大量的内存和CPU资源。 而利用滑动列表复用的技术,只在可视范围内实例化和显示部分元素,其他不可见的元素会被回收,以便在需要显示时能够被快速调用和展示。这样能够有效地减少内存的占用和CPU的计算量,并且提高渲染的效率。 在实现滑动列表复用时,一般需要使用Unity的UI组件,如ScrollView和Viewport。其中ScrollView用来处理滑动的逻辑,而Viewport则是实际显示元素的区域。在Viewport区域内,需要使用一个列表容器,如GridLayoutGroup或者VerticalLayoutGroup,用来放置元素的布局。 当滑动列表时,可以通过滑动的位置计算出需要显示的元素范围,然后根据这个范围动态地实例化和回收列表的元素。具体的实现方式可以通过数据绑定、对象池技术等。 通过使用滑动列表复用的技术,可以大大降低性能消耗,提高游戏的流畅度和响应速度。同时,它也适用于各种类型的列表,如角色列表、背包列表等。 ### 回答2: Unity滑动列表复用是指在滑动列表中,为了节省资源和提高性能,只在可见范围内创建和显示列表项,当列表项滑出可见范围后,将其隐藏并放入对象池中,待需要再次显示的时候,直接从对象池中获取,避免频繁地创建和销毁列表项。 实现滑动列表复用的关键是要使用Unity提供的ScrollRect组件和RectTransform组件,以及编写代码来控制列表项的创建、隐藏和显示。 具体实现步骤如下: 1. 创建一个ScrollRect组件,用于实现滑动功能。 2. 在ScrollRect中创建一个Content对象,作为滑动列表的内容容器。 3. 创建一个预制体,作为滑动列表列表项。 4. 编写脚本,控制列表项的创建、隐藏和显示。在脚本中,可以使用对象池技术来管理列表项的复用,即在滑出可见范围时,将其隐藏并放入对象池,需要显示时,从对象池中获取。同时,根据滑动的位置,动态计算需要显示的列表项,将其显示出来。 5. 使用RectTransform组件来设置Content的大小,以便适应滑动列表中的列表项。 通过以上步骤,就可以实现滑动列表的复用。这样做的好处是可以大大减少内存消耗,提高性能,特别是当列表项较多时,效果更为明显。 需要注意的是,滑动列表复用的实现需要根据具体需求和项目的框架来设计和编写,可以根据实际情况进行调整和优化。 ### 回答3: Unity中的滑动列表复用是一种优化技术,用于在滚动容器(例如ScrollView)中动态创建和复用列表项(例如UI元素)。 滑动列表是一个常见的UI设计元素,通常用于显示大量数据或多个列表项。在传统的做法中,为了显示所有的列表项,会将它们全部实例化并放置在容器中。但是当列表项数量过多时,这种做法会导致性能问题,因为每个列表项都需要占用一定的内存和处理计算。 为了解决这个问题,Unity中引入了滑动列表复用的概念。它的工作原理是,只实例化能够同时展示在可见区域内的列表项,而在滑动过程中,通过不断复用已实例化的列表项来避免频繁的创建和销毁操作。 具体实现上,通常会通过计算可见区域的大小和位置,以及每个列表项的大小来确定当前需要显示的列表项范围。然后在滑动过程中,通过改变列表项的位置和内容来实现复用效果。一般会维护一个对象池,保存已实例化的列表项,以便在滑动时快速切换和更新它们的内容,避免频繁的创建和销毁操作。 通过使用滑动列表复用技术,可以显著提升滑动容器的性能和效率。它减少了内存的占用和对象的创建数量,降低了CPU的负载,并提高了滑动的流畅度和响应速度,尤其在处理大型列表时效果更加明显。 总之,滑动列表复用是Unity中一种高效优化滑动容器性能的技术,它通过动态复用和更新列表项,减少内存占用和CPU负载,提高滑动的流畅度和响应速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值