开始制作好友系统了, 发现有一个UI跟QQ的面板一模一样. 于是就写了一个公共的下拉滚动框.需要把按钮的中心点(pivot.y = 1),描点为最上方 直接上图吧

代码如下:

  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.UI;
  4. using UnityEngine.EventSystems;
  5. using System.Collections.Generic;
  6. using UnityEngine.Events;
  7.  
  8. public class DropScroll : MonoBehaviour {
  9.  
  10. [SerializeField]
  11. private Button[] btnList; //提供多个按钮
  12. private RectTransform thisRT;
  13.  
  14. [SerializeField]
  15. private GameObject scrollViewTmp; //提供一个滚动视图模版
  16. private List<RectTransform> scrollViewList = new List<RectTransform>();
  17.  
  18. public void Start()
  19. {
  20. Init();
  21. }
  22.  
  23. public void Init()
  24. {
  25. RectTransform rt = null;
  26.  
  27. foreach (var btn in btnList)
  28. {
  29. EventTriggerListener.Get(btn.gameObject).OnClick += BtnDropClickEvent;
  30. rt = GameObject.Instantiate(scrollViewTmp).GetComponent<RectTransform>();
  31. scrollViewList.Add(rt);
  32. rt.gameObject.SetActive(false);
  33. rt.transform.SetParent(this.transform,false);
  34. }
  35.  
  36. thisRT = this.GetComponent<RectTransform>();
  37. }
  38.  
  39. private void BtnDropClickEvent(GameObject go)
  40. {
  41. RectTransform rt = go.GetComponent<RectTransform>();
  42. RectTransform btnRt = null;
  43. float height = thisRT.sizeDelta.y;
  44. int index = rt.GetSiblingIndex();
  45.  
  46. HideAllScrollView();
  47. scrollViewList[index].sizeDelta = new Vector2(thisRT.sizeDelta.x, height - btnList.Length * rt.sizeDelta.y);
  48. scrollViewList[index].anchoredPosition = new Vector2(0, -((index + 1) * rt.sizeDelta.y));
  49. scrollViewList[index].gameObject.SetActive(true);
  50.  
  51. for (int i = 0; i < btnList.Length; i++)
  52. {
  53. btnRt = btnList[i].GetComponent<RectTransform>();
  54. if (i > index)
  55. {
  56. btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -height + ((btnList.Length - i) * btnRt.sizeDelta.y));
  57. }
  58. else
  59. {
  60. btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -(i * btnRt.sizeDelta.y));
  61. }
  62. }
  63. }
  64.  
  65. private void HideAllScrollView()
  66. {
  67. for (int i = 0; i < scrollViewList.Count; i++)
  68. {
  69. scrollViewList[i].gameObject.SetActive(false);
  70. }
  71. }
  72. }
  73.  
  74. public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger
  75. {
  76. public delegate void VoidDelegate(GameObject go);
  77. public event VoidDelegate OnClick;
  78.  
  79. static public EventTriggerListener Get(GameObject go)
  80. {
  81. EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
  82.  
  83. if (listener == null)
  84. listener = go.AddComponent<EventTriggerListener>();
  85.  
  86. return listener;
  87. }
  88.  
  89. public override void OnPointerClick(PointerEventData eventData)
  90. {
  91. if (OnClick != null)
  92. OnClick(gameObject);
  93. }
  94. }

 

层次图:

UGUI 下拉滚动框的更多相关文章

  1. java、easyui-combotree树形下拉选择框

    最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...

  2. FancySelect – 更好用的 jQuery 下拉选择框插件

    FancySelect 这款插件是 Web 开发中下拉框功能的一个更好的选择.FancySelect 使用方便,只要绑定页面上的任何 Select 元素,并调用就 .fancySelect() 就可以 ...

  3. [js开源组件开发]模拟下拉选项框select

    模拟下拉选项框select 在css3流行的情况下,下拉框还是无法满足PD的需求,所以有了autosearch,有了模拟下拉框.效果如下图: select DEMO请案例点击这里查看.http://w ...

  4. HTML、CSS小知识--兼容IE的下拉选择框select

    HTML <div class="s_h_ie"> <select id="Select1" disabled="disabled& ...

  5. Bootstrap系列 -- 15. 下拉选择框select

    Bootstrap框架中的下拉选择框使用和原始的一致,多行选择设置multiple属性的值为multiple.Bootstrap框架会为这些元素提供统一的样式风格 <form role=&quo ...

  6. CSS自定义select下拉选择框(不用其他标签模拟)

    今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...

  7. 基于jQuery美化联动下拉选择框

    今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...

  8. Bootstrap-风格的下拉按框:Bootstrap Select

    Bootstrap Select 是一个jQuery插件,提供了Bootstrap 风格的下拉选择框.拥有许多自定义的选项,可多选. 效果图: 源代码: <select class=" ...

  9. ul+jquery自定义下拉选择框

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. 关于phpmyadmin中添加外键的做法

    今天想加个外键,又不想用命令行,打开PHPMYADMIN看怎么弄,找了半天没有找到添加外键的地方,然后上网搜了一会,发现目前的PHPMYADMIN确实没有这个设置,所以只能手动命令行添加了.   语法 ...

  2. assertion的语法和语义

    .1) 语法表示 在语法上,为了支持assertion,Java增加了一个关键字assert.它包括两种表达式,分别如下: assert expression1; assert expression1 ...

  3. Android Clipboard(复制/剪贴板)

    Android提供的剪贴板框架,复制和粘贴不同类型的数据.数据可以是文本,图像,二进制流数据或其它复杂的数据类型. Android提供ClipboardManager.ClipData.Item和Cl ...

  4. Mina入门实例

    继续上一篇,这篇主要讲通过mina往B端发送消息.并接受消息,mina是一个网络通信框架,封装了javaNIO.简单易用.网上有非常多关于他的介绍,在此不赘述了. 如上篇所介绍,完毕功能,须要五个类: ...

  5. 通过数组初始化链表的两种方法:指向指针的引用node *&tail和指向指针的指针(二维指针)node **tail

    面试高频题:单链表的逆置操作/链表逆序相关文章 点击打开 void init_node(node *tail,char *init_array) 这样声明函数是不正确的,函数的原意是通过数组初始化链表 ...

  6. MySQL常用命令大全(转)

    下面是我们经常会用到且非常有用的MySQL命令.下面你看到#表示在Unix命令行下执行命令,看到mysql>表示当前已经登录MySQL服务器,是在mysql客户端执行mysql命令. 登录MyS ...

  7. PagerSlidingTabStrip的使用

    布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...

  8. win7 安装 IIS

    和xp不同,xp安装 IIS需要下载额外的软件包. 步骤 1,依次打开 "控制面板" -> "程序" ->"打开或关闭windows功能& ...

  9. easyui之combobox(不定时补充)

    1,combobox的valuefeild和textfeild这两个属性,可以理解为键值对,即:键valuefeild:值textfeild textfeild是文本框内显示的值,如果要取文本框内的值 ...

  10. Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1

    linux空设备文件和重定向 输出/输入重导向 >      >>   <   <<   :>   &>   2&>   2< ...