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> ...
随机推荐
- ACPI电源管理中的S0 S1 S2 S3 S4 S5
电源选项中S0,S1,S2,S3,S4,S5的含义以 ACPI 的规格来说吧!ACPI(Advanced Configuration and Power Interface),即高级配置与电源接口.这 ...
- apache ab工具对网站进行压力测试
Apache -- ab工具主要测试网站的(并发性能) 这个工具非常的强大. 基本语法 : cmd>ab.exe –n 请求总次数 -c 并发数 请求页面的url 进入到ab.ex ...
- (转)sp_executesql介绍和使用
execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的, 如: ...
- MVC项目发布IIS访问不了
首先在配置文件上加红色字体这个配置 用来打印错误信息,再根据错误信息来处理 <system.webServer> <validation validateIntegratedMode ...
- 完整的Ajax实例
写在前面的话: 用了很久的Asp.Net Ajax,也看了段时间的jquery中ajax的应用,但到头来,居然想不起xmlHttpRequest的该如何使用了. 以前记的也不怎么清楚,这次就重新完整的 ...
- 《APUE》读书笔记第十三章-守护进程
守护进程 守护进程是生存期较长的一种进程,它们常常在系统自举时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的.UNIX系统由很多守护进程,它们执行日常事务活动. 本章主要介 ...
- U盘装系统系列二—-如何设置U盘启动
老毛桃U盘启动制作好之后,如何设置U盘启动呢?我的是华硕的电脑,开机后按F2进入BIOS设置(不同主板可能不一样,比如有的是按向下键或者Del键,可以在网上查下看看),按Tab键选中Boot:按向下键 ...
- 算法导论之python实现插入排序
插入排序的花费时间 c*n2, c 是常数 伪代码 INSERTION-SORT(A) for i to A.length key = A[j] //Insert A[j] into the sor ...
- linux 下 重启apache
重启 apache #service httpd restart
- python之6-2高阶函数
1. map函数 map(函数A,字符串或者列表) map函数的意思是将函数A依次作用到字符串的每个字符或者列表的每个元素. 例如: map(lambda x: x*x,[1,2]) [1, 4] 这 ...