UGUI 下拉滚动框
开始制作好友系统了, 发现有一个UI跟QQ的面板一模一样. 于是就写了一个公共的下拉滚动框.需要把按钮的中心点(pivot.y = 1),描点为最上方 直接上图吧
代码如下:
- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- using UnityEngine.EventSystems;
- using System.Collections.Generic;
- using UnityEngine.Events;
- public class DropScroll : MonoBehaviour {
- [SerializeField]
- private Button[] btnList; //提供多个按钮
- private RectTransform thisRT;
- [SerializeField]
- private GameObject scrollViewTmp; //提供一个滚动视图模版
- private List<RectTransform> scrollViewList = new List<RectTransform>();
- public void Start()
- {
- Init();
- }
- public void Init()
- {
- RectTransform rt = null;
- foreach (var btn in btnList)
- {
- EventTriggerListener.Get(btn.gameObject).OnClick += BtnDropClickEvent;
- rt = GameObject.Instantiate(scrollViewTmp).GetComponent<RectTransform>();
- scrollViewList.Add(rt);
- rt.gameObject.SetActive(false);
- rt.transform.SetParent(this.transform,false);
- }
- thisRT = this.GetComponent<RectTransform>();
- }
- private void BtnDropClickEvent(GameObject go)
- {
- RectTransform rt = go.GetComponent<RectTransform>();
- RectTransform btnRt = null;
- float height = thisRT.sizeDelta.y;
- int index = rt.GetSiblingIndex();
- HideAllScrollView();
- scrollViewList[index].sizeDelta = new Vector2(thisRT.sizeDelta.x, height - btnList.Length * rt.sizeDelta.y);
- scrollViewList[index].anchoredPosition = new Vector2(0, -((index + 1) * rt.sizeDelta.y));
- scrollViewList[index].gameObject.SetActive(true);
- for (int i = 0; i < btnList.Length; i++)
- {
- btnRt = btnList[i].GetComponent<RectTransform>();
- if (i > index)
- {
- btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -height + ((btnList.Length - i) * btnRt.sizeDelta.y));
- }
- else
- {
- btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -(i * btnRt.sizeDelta.y));
- }
- }
- }
- private void HideAllScrollView()
- {
- for (int i = 0; i < scrollViewList.Count; i++)
- {
- scrollViewList[i].gameObject.SetActive(false);
- }
- }
- }
- public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger
- {
- public delegate void VoidDelegate(GameObject go);
- public event VoidDelegate OnClick;
- static public EventTriggerListener Get(GameObject go)
- {
- EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
- if (listener == null)
- listener = go.AddComponent<EventTriggerListener>();
- return listener;
- }
- public override void OnPointerClick(PointerEventData eventData)
- {
- if (OnClick != null)
- OnClick(gameObject);
- }
- }
层次图:
UGUI 下拉滚动框的更多相关文章
- java、easyui-combotree树形下拉选择框
最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...
- FancySelect – 更好用的 jQuery 下拉选择框插件
FancySelect 这款插件是 Web 开发中下拉框功能的一个更好的选择.FancySelect 使用方便,只要绑定页面上的任何 Select 元素,并调用就 .fancySelect() 就可以 ...
- [js开源组件开发]模拟下拉选项框select
模拟下拉选项框select 在css3流行的情况下,下拉框还是无法满足PD的需求,所以有了autosearch,有了模拟下拉框.效果如下图: select DEMO请案例点击这里查看.http://w ...
- HTML、CSS小知识--兼容IE的下拉选择框select
HTML <div class="s_h_ie"> <select id="Select1" disabled="disabled& ...
- Bootstrap系列 -- 15. 下拉选择框select
Bootstrap框架中的下拉选择框使用和原始的一致,多行选择设置multiple属性的值为multiple.Bootstrap框架会为这些元素提供统一的样式风格 <form role=&quo ...
- CSS自定义select下拉选择框(不用其他标签模拟)
今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...
- 基于jQuery美化联动下拉选择框
今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...
- Bootstrap-风格的下拉按框:Bootstrap Select
Bootstrap Select 是一个jQuery插件,提供了Bootstrap 风格的下拉选择框.拥有许多自定义的选项,可多选. 效果图: 源代码: <select class=" ...
- ul+jquery自定义下拉选择框
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- 关于phpmyadmin中添加外键的做法
今天想加个外键,又不想用命令行,打开PHPMYADMIN看怎么弄,找了半天没有找到添加外键的地方,然后上网搜了一会,发现目前的PHPMYADMIN确实没有这个设置,所以只能手动命令行添加了. 语法 ...
- assertion的语法和语义
.1) 语法表示 在语法上,为了支持assertion,Java增加了一个关键字assert.它包括两种表达式,分别如下: assert expression1; assert expression1 ...
- Android Clipboard(复制/剪贴板)
Android提供的剪贴板框架,复制和粘贴不同类型的数据.数据可以是文本,图像,二进制流数据或其它复杂的数据类型. Android提供ClipboardManager.ClipData.Item和Cl ...
- Mina入门实例
继续上一篇,这篇主要讲通过mina往B端发送消息.并接受消息,mina是一个网络通信框架,封装了javaNIO.简单易用.网上有非常多关于他的介绍,在此不赘述了. 如上篇所介绍,完毕功能,须要五个类: ...
- 通过数组初始化链表的两种方法:指向指针的引用node *&tail和指向指针的指针(二维指针)node **tail
面试高频题:单链表的逆置操作/链表逆序相关文章 点击打开 void init_node(node *tail,char *init_array) 这样声明函数是不正确的,函数的原意是通过数组初始化链表 ...
- MySQL常用命令大全(转)
下面是我们经常会用到且非常有用的MySQL命令.下面你看到#表示在Unix命令行下执行命令,看到mysql>表示当前已经登录MySQL服务器,是在mysql客户端执行mysql命令. 登录MyS ...
- PagerSlidingTabStrip的使用
布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- win7 安装 IIS
和xp不同,xp安装 IIS需要下载额外的软件包. 步骤 1,依次打开 "控制面板" -> "程序" ->"打开或关闭windows功能& ...
- easyui之combobox(不定时补充)
1,combobox的valuefeild和textfeild这两个属性,可以理解为键值对,即:键valuefeild:值textfeild textfeild是文本框内显示的值,如果要取文本框内的值 ...
- Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1
linux空设备文件和重定向 输出/输入重导向 > >> < << :> &> 2&> 2< ...