Scroll View控制菜单栏的伸缩
来源:互联网 发布:java数组和指针的区别 编辑:程序博客网 时间:2024/06/15 10:40
一:操作篇
在Cavas 添加Scroll View,想要横排的物品栏。在Viewport 下的Content上添加组件:Grid Layout Grop和Content Size Fitter
在Content下添加button,
Content:计算要显示物品栏的多少
二:代码篇
//所有的父(第一级主)菜单
public List<GameObject> allObj = new List<GameObject>();
Vector2 contentSizeData;//每次计算Content的所容纳的数量
RectTransform contentRt;
GameObject lastObj;//最后一次点击的父菜单
void Start ()
{
List<GameObject> child = new List<GameObject>();//所有子类菜单
child.Add(GameObject.Find("Button (1)"));
child.Add(GameObject.Find("Button (2)"));
child.Add(GameObject.Find("Button (3)"));
child.Add(GameObject.Find("Button (4)"));
child.Add(GameObject.Find("Button (5)"));
child.Add(GameObject.Find("Button (6)"));
child.Add(GameObject.Find("Button (7)"));
child.Add(GameObject.Find("Button (8)"));
child.Add(GameObject.Find("Button (9)"));
child.Add(GameObject.Find("Button (10)"));
child.Add(GameObject.Find("Button (11)"));
child.Add(GameObject.Find("Button (12)"));
child.Add(GameObject.Find("Button (13)"));
child.Add(GameObject.Find("Button (14)"));
child.Add(GameObject.Find("Button (15)"));
child.Add(GameObject.Find("Button (16)"));
child.Add(GameObject.Find("Button (17)"));
child.Add(GameObject.Find("Button (18)"));
child.Add(GameObject.Find("Button (19)"));
child.Add(GameObject.Find("Button (20)"));
public List<GameObject> allObj = new List<GameObject>();
Vector2 contentSizeData;//每次计算Content的所容纳的数量
RectTransform contentRt;
GameObject lastObj;//最后一次点击的父菜单
void Start ()
{
List<GameObject> child = new List<GameObject>();//所有子类菜单
child.Add(GameObject.Find("Button (1)"));
child.Add(GameObject.Find("Button (2)"));
child.Add(GameObject.Find("Button (3)"));
child.Add(GameObject.Find("Button (4)"));
child.Add(GameObject.Find("Button (5)"));
child.Add(GameObject.Find("Button (6)"));
child.Add(GameObject.Find("Button (7)"));
child.Add(GameObject.Find("Button (8)"));
child.Add(GameObject.Find("Button (9)"));
child.Add(GameObject.Find("Button (10)"));
child.Add(GameObject.Find("Button (11)"));
child.Add(GameObject.Find("Button (12)"));
child.Add(GameObject.Find("Button (13)"));
child.Add(GameObject.Find("Button (14)"));
child.Add(GameObject.Find("Button (15)"));
child.Add(GameObject.Find("Button (16)"));
child.Add(GameObject.Find("Button (17)"));
child.Add(GameObject.Find("Button (18)"));
child.Add(GameObject.Find("Button (19)"));
child.Add(GameObject.Find("Button (20)"));
AddItem(GameObject.Find("Button"), child);
Init();
}
/// <summary>
/// 初始化
/// </summary>
void Init()
{
lastObj = null;
contentRt = GameObject.Find("Canvas/MY Scroll View/Viewport/Content").GetComponent<RectTransform>();
contentSizeData = contentRt.sizeDelta;
contentSizeData.y = 0;
for (int i = 0; i < allObj.Count; i++)
{
ChildListState(allObj[i], 0, false);
contentSizeData.y += allObj[i].GetComponent<RectTransform>().sizeDelta.y;
}
contentRt.sizeDelta = contentSizeData;
}
/// <summary>
/// 加入一个父菜单和子菜单
/// </summary>
/// <param name="parent">父菜单物体</param>
/// <param name="childList">子菜单</param>
private void AddItem(GameObject parent, List<GameObject> childList)
{ //(应用委托,传一个方法)
parent.GetComponent<Button>().onClick.AddListener(delegate { OnClickParent(parent); });
allObj.Add(parent);//添加到父物体菜单
ItemGroup group = parent.AddComponent<ItemGroup>();
foreach (GameObject item in childList)
group.childList.Add(item);
childList.Clear();
}
/// <summary>
/// 控制子菜单的显示和隐藏
/// </summary>
/// <param name="item">父菜单物体</param>
/// <param name="isShow">是否显示,0隐藏1显示2列表的第一个物体的相反状态</param>
/// <param name="costSizedata">是否计算sizedata的高度</param>
public void ChildListState(GameObject item, int isShow, bool costSizedata = false)
{
List<GameObject> childlist = item.GetComponent<ItemGroup>().childList;
if (isShow == 2 && childlist.Count > 0)
{
isShow = childlist[0].activeSelf == false ? 1 : 0;
}
for (int i = 0; i < childlist.Count; i++)
{
childlist[i].SetActive(isShow == 1 ? true : false);
if (costSizedata)
{
if (childlist[i].activeSelf)
contentSizeData.y += childlist[i].GetComponent<RectTransform>().sizeDelta.y;
else
contentSizeData.y -= childlist[i].GetComponent<RectTransform>().sizeDelta.y;
}
childlist[i].GetComponentInChildren<Text>().text = item.name + i;
}
contentRt.sizeDelta = contentSizeData;
}
/// <summary>
/// 点击父菜单的时候弹出子菜单
/// </summary>
/// <param name="item">父菜单物体</param>
public void OnClickParent(GameObject item)
{
ChildListState(item, 2, true);
}
/// <summary>
/// 初始化
/// </summary>
void Init()
{
lastObj = null;
contentRt = GameObject.Find("Canvas/MY Scroll View/Viewport/Content").GetComponent<RectTransform>();
contentSizeData = contentRt.sizeDelta;
contentSizeData.y = 0;
for (int i = 0; i < allObj.Count; i++)
{
ChildListState(allObj[i], 0, false);
contentSizeData.y += allObj[i].GetComponent<RectTransform>().sizeDelta.y;
}
contentRt.sizeDelta = contentSizeData;
}
/// <summary>
/// 加入一个父菜单和子菜单
/// </summary>
/// <param name="parent">父菜单物体</param>
/// <param name="childList">子菜单</param>
private void AddItem(GameObject parent, List<GameObject> childList)
{ //(应用委托,传一个方法)
parent.GetComponent<Button>().onClick.AddListener(delegate { OnClickParent(parent); });
allObj.Add(parent);//添加到父物体菜单
ItemGroup group = parent.AddComponent<ItemGroup>();
foreach (GameObject item in childList)
group.childList.Add(item);
childList.Clear();
}
/// <summary>
/// 控制子菜单的显示和隐藏
/// </summary>
/// <param name="item">父菜单物体</param>
/// <param name="isShow">是否显示,0隐藏1显示2列表的第一个物体的相反状态</param>
/// <param name="costSizedata">是否计算sizedata的高度</param>
public void ChildListState(GameObject item, int isShow, bool costSizedata = false)
{
List<GameObject> childlist = item.GetComponent<ItemGroup>().childList;
if (isShow == 2 && childlist.Count > 0)
{
isShow = childlist[0].activeSelf == false ? 1 : 0;
}
for (int i = 0; i < childlist.Count; i++)
{
childlist[i].SetActive(isShow == 1 ? true : false);
if (costSizedata)
{
if (childlist[i].activeSelf)
contentSizeData.y += childlist[i].GetComponent<RectTransform>().sizeDelta.y;
else
contentSizeData.y -= childlist[i].GetComponent<RectTransform>().sizeDelta.y;
}
childlist[i].GetComponentInChildren<Text>().text = item.name + i;
}
contentRt.sizeDelta = contentSizeData;
}
/// <summary>
/// 点击父菜单的时候弹出子菜单
/// </summary>
/// <param name="item">父菜单物体</param>
public void OnClickParent(GameObject item)
{
ChildListState(item, 2, true);
if (lastObj != null)
{
if (lastObj != item)
{
if (lastObj.GetComponent<ItemGroup>().childList[0].activeSelf)
ChildListState(lastObj, 2, true);
}
}
lastObj = item;
}
{
if (lastObj != item)
{
if (lastObj.GetComponent<ItemGroup>().childList[0].activeSelf)
ChildListState(lastObj, 2, true);
}
}
lastObj = item;
}
阅读全文
0 0
- Scroll View控制菜单栏的伸缩
- Android View的滚动scroll
- 滚动的商店,scroll view
- UGUI菜单栏伸缩
- Scroll View
- Scroll View
- 超实用的JavaScript代码段 Item2 --伸缩菜单栏
- NGUI的Scroll View的制作
- daikon forge scroll view排序的问题。
- NGUI 3.0 Scroll View的使用
- 如何制作NGUI的Scroll View
- NGUI创建Scroll View的基本步骤
- 小程序中scroll-view的使用
- 微信小程序的视图容器-- scroll-view
- 微信小程序计算scroll-view的高度
- android scroll view infinite scroll
- WinForm: 控制RichTextBox的Scroll Bar
- 如何控制文本框的SCROLL bar
- Leetcode——Knight Probability in Chessboard
- mysql外键约束详解
- Freemarker获取上个页面表单提交的参数
- 李沐深度学习第二课
- luogu P1044 栈(NOIP 2003)
- Scroll View控制菜单栏的伸缩
- 第一届蓝桥杯C/C++组编程题2 兑换纸币
- 【Mac】解决jenkins执行shell脚本等场景中遇见的权限不足问题
- 【CS】(奇妙的)虚拟存储器
- 【ORACLE】ORA-32004: 问题分析和解决
- response.setHeader()的用法
- 《图说区块链》写的乱七八糟
- bzoj #1001 狼抓兔子(图论/网络流)
- python第三方工具cdiff、yapf、isort、supervisor