在滚动列表中再次插入一个滚动列表,实现能点击收放

描述:在一个滚动列表中,再次插入一个滚动列表。 实现点击上层滚动列表中的按钮,让他的子物体显示出来并使得整个滚动列表的Content放大,再次点击实现收缩,并使得整个滚动列表的Content缩小。

 

操作内容如上图:

下面是添加在ClubItems上的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ClubItenZommController : MonoBehaviour
{

    public RectTransform ClubItemsTrans;
    public RectTransform ContentTrans;
    private RectTransform ParentTrans;

    private float clubItemHeight;      //获得clubItem当前的高度
    private float contenHeight;        //获得content当前的高度

    public GameObject clubItem;

    public Button ShowOrCloseBtn;

    private bool isShow;

    private List<GameObject> ClubItem = new List<GameObject>();

    /// <summary>
    /// 加减的高度
    /// </summary>
    private float redusNumber = 71.5f;

    private static float tempParentY;
    private float tempThisClubItemsY;
    private float tempContentTransY;


    void Start()
    {
        isShow = true;
        ParentTrans = this.gameObject.transform.parent.GetComponentInParent<RectTransform>();
        clubItemHeight = ClubItemsTrans.sizeDelta.y;
        contenHeight = ContentTrans.sizeDelta.y;

        ShowOrCloseBtn.onClick.AddListener(OnShowOrCloseBtnClick);

        for (int i = 0; i < 11; i++)
        {
            Init(i);
        }
        TheClubHeightAdd(11, ParentTrans.childCount);

        tempThisClubItemsY = ClubItemsTrans.sizeDelta.y;
        tempContentTransY = ContentTrans.sizeDelta.y;
        tempParentY = ParentTrans.sizeDelta.y;
    }

    /// <summary>
    /// 按钮的点击事件
    /// </summary>
    public void OnShowOrCloseBtnClick()
    {
        if (isShow)
        {
            HideMyClubItem();
        }
        else
        {
            ShowMyClubItem();
        }

    }

    /// <summary>
    /// 缩小时数据清理
    /// </summary>
    public void HideMyClubItem()
    {
        for (int i = 0; i < ClubItem.Count; i++)
        {
            ClubItem[i].transform.gameObject.SetActive(false);
        }


        //这个地方值得注意:你这里不给他价格值 ContentSizeFitter 是不会变动
        float needY = tempParentY + 0.1f;

        ClubItemsTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 80.79f);

        ContentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 61.8f);

        ParentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, needY);

        isShow = false;

    }

    /// <summary>
    /// 放开时,看到我自己俱乐部中的球星数据
    /// </summary>
    public void ShowMyClubItem()
    {
        for (int i = 0; i < ClubItem.Count; i++)
        {
            ClubItem[i].transform.gameObject.SetActive(true);
        }

        ClubItemsTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempThisClubItemsY);

        ContentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempContentTransY);

        ParentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempParentY);

        isShow = true;
    }

    /// <summary>
    /// 设置加入 index 个单位的 item 后的高度
    /// </summary>
    /// <param name="index"></param>
    public void TheClubHeightAdd(int index, int count)
    {
        ClubItemsTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, clubItemHeight + index * redusNumber);
        ParentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, (clubItemHeight + index * redusNumber) * count + 5);
        ContentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, contenHeight + index * redusNumber);
    }

    /// <summary>
    /// 初始化俱乐部Item下的子物体的个数
    /// </summary>
    /// <param name="index">个数</param>
    private void Init(int index)
    {
        GameObject go = (GameObject)Instantiate(clubItem, ContentTrans.transform.position, Quaternion.identity);
        go.transform.SetParent(ContentTrans);
        ClubItem.Add(go);
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值