欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

Unity实现QQ列表折叠菜单

时间:2021-07-06 10:10:55|栏目:.NET代码|点击:

本文实例为大家分享了Unity实现QQ列表折叠菜单的具体代码,供大家参考,具体内容如下

主要用到了GUI的自动布局功能,VerticalLayoutGroup,注意ChildControlsSize 和ChildForceExpand属性设置为 Width

效果:

实现代码:

/// <summary>
/// 折叠菜单
/// </summary>
public class FoldPanel : MonoBehaviour
{
  [SerializeField]
  private GameObject panelItem; // 折叠页
  [SerializeField]
  private TitleItem titleItem;
  [SerializeField]
  private DataItem dataItem;

  public List<FoldData> dataList = new List<FoldData>();

  private void Start()
  {
    Create();
  }

  public void Create()
  {
    for (int i = 0; i < dataList.Count; i++)
    {
      // 创建标题
      TitleItem title = Instantiate(titleItem).GetComponent<TitleItem>();
      title.SetTitle(dataList[i].titleName);
      title.transform.SetParent(this.transform);

      // 创建子折叠面板
      GameObject panel = Instantiate(panelItem);
      panel.transform.SetParent(this.transform);
      // 260是折叠页的宽度,30DataItem的高度
      panel.GetComponent<RectTransform>().sizeDelta = new Vector3(260,30 * dataList[i].data.Count);
      title.SetFoldPanel(panel);
      panel.SetActive(false);

      // 创建折叠页数据
      for (int j = 0; j < dataList[i].data.Count; j++)
      {
        DataItem item = Instantiate(dataItem).GetComponent<DataItem>();
        item.transform.SetParent(panel.transform);
        item.SetInfo(dataList[i].data[j]);
      }
    }
  }
}

[System.Serializable]
public class FoldData
{
  public string titleName;
  public List<ItemData> data;
}

[System.Serializable]
public class ItemData
{
  public string userName;
  //public string imageName;
  public Sprite imageName;
}

TitleItem.cs

public class TitleItem : MonoBehaviour,IPointerClickHandler
{
  [SerializeField]
  private Text title;
  [SerializeField]
  private Transform arrow;

  public bool isFold = true; // 是否是折叠状态
  public Transform foldPanel; 

  public void OnPointerClick(PointerEventData eventData)
  {
    if (isFold)
    {
      isFold = false;

      arrow.DORotate(Vector3.zero, 0.1f);

      if (foldPanel != null)
      {
        foldPanel.gameObject.SetActive(true);
        foldPanel.DOScaleY(1, 0.1f);
      }
    }
    else
    {
      isFold = true;
      arrow.DORotate(new Vector3(0, 0, 90), 0.1f);
      
      if (foldPanel != null)
      {
        foldPanel.DOScaleY(0, 0.1f).OnComplete(() => { foldPanel.gameObject.SetActive(false); });
      }
    }
  }

  public void SetTitle(string _titleName)
  {
    title.text = _titleName;
  }

  public void SetFoldPanel(GameObject panel)
  {
    foldPanel = panel.transform;
  }
}

列表的数据来源是在界面上手动配置的,当然如果想要读取本地或者服务器的数据也是可以的。

上一篇:C#中判断、验证字符串是否为日期格式的实现代码

栏    目:.NET代码

下一篇:C#使用itextsharp生成PDF文件的实现代码

本文标题:Unity实现QQ列表折叠菜单

本文地址:http://www.codeinn.net/misctech/153637.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有