UGUI(十五)下拉列表的封装

UGUI中暂时没有下拉列表控件,自己动手封装一个也不是难事。这种节点可控的可视化UI做一些高级控件还算比较方便。
UGUI(十五)下拉列表的封装

下拉列表的主要接口:
1.将数据列表传递进去
2.给外部逻辑可注册的item点击事件等
3.获取当前选中的索引

UI节点如下:
UGUI(十五)下拉列表的封装
其中子节点对象全部设置middle center,pivot全部设置0.5,0.5。
其实就是默认参数,封装好的组件尽量不去设置子节点位置参数。
然后在做其他下拉框的时候,只用换图和设置UISelectList的脚本参数即可。

代码如下:
  1. using UnityEngine;  
  2. using System.Collections.Generic;  
  3. using UnityEngine.UI;  
  4.   
  5. public class UISelectList MonoBehaviour  
  6.  
  7.     public UISelectListType m_type UISelectListType.Down;  
  8.     public enum UISelectListType  
  9.      
  10.         Up,  
  11.         Down  
  12.      
  13.     public Text m_curText;  
  14.     public GameObject m_listPanel;  
  15.     public RectTransform m_listBg;  
  16.     public float m_listBgOffset 4 
  17.   
  18.     public Transform m_parent;  
  19.     public GameObject m_item;  
  20.     public int m_itemHeight 20 
  21.     public Transform m_foucs;  
  22.   
  23.     private int m_curIndex 0 
  24.     private List m_list new List();  
  25.   
  26.     void Start()  
  27.      
  28.         m_item.SetActive(false);  
  29.         Hide();  
  30.         UIEventListener.Get(m_curText.gameObject).onClick OnClickBtn;  
  31.         UIEventListener.Get(m_listPanel).onHover OnHoverPanel;  
  32.         // 测试一下  
  33.         Test();  
  34.      
  35.   
  36.     void Test()  
  37.      
  38.         m_list new List();  
  39.         m_list.Add("1111111");  
  40.         m_list.Add("2222222");  
  41.         m_list.Add("3333333");  
  42.         m_list.Add("4444444");  
  43.         m_list.Add("5555555");  
  44.         m_list.Add("6666666");  
  45.         SetList(m_list);  
  46.      
  47.   
  48.     public void Show()  
  49.      
  50.         m_listPanel.SetActive(true);  
  51.      
  52.   
  53.     public void Hide()  
  54.      
  55.         m_listPanel.SetActive(false);  
  56.      
  57.   
  58.     public void SetText(int index)  
  59.      
  60.         m_curIndex index;  
  61.         m_curText.text m_list[index];  
  62.      
  63.   
  64.     public int GetIndex()  
  65.      
  66.         return m_curIndex;  
  67.      
  68.   
  69.     public List SetList(List list)  
  70.      
  71.         // 返回item对象列表,给逻辑注册事件等  
  72.         List itemList new List();  
  73.         m_list list;  
  74.         int num list.Count;  
  75.         for (int 0num; i++)  
  76.          
  77.             Transform item m_parent.FindChild(i.ToString());  
  78.             if (item == null 
  79.              
  80.                 item ((GameObject)GameObject.Instantiate(m_item)).transform;  
  81.                 item.SetParent(m_parent.transform);  
  82.                 item.name i.ToString();  
  83.                 item.localScale Vector3.one;  
  84.                 item.gameObject.SetActive(true);  
  85.              
  86.             item.GetComponent().text list[i];  
  87.             if (m_type == UISelectListType.Down)  
  88.                 item.localPosition new Vector2(0-1 m_itemHeight);  
  89.             else  
  90.                 item.localPosition new Vector2(0m_itemHeight);  
  91.   
  92.             UIEventListener lis UIEventListener.Get(item.gameObject);  
  93.             lis.onHover OnHoverItem;  
  94.             lis.onClick OnClickItem;  
  95.             lis.parameter i;  
  96.             itemList.Add(item.gameObject);  
  97.          
  98.         // 更新背景大小  
  99.         m_listBg.sizeDelta new Vector2(m_listBg.sizeDelta.x, num m_itemHeight 2 m_listBgOffset);  
  100.         // 更新列表位置和背景位置  
  101.         if (m_type == UISelectListType.Down)  
  102.          
  103.             m_listPanel.transform.localPosition new Vector2(0-1 GetComponent().sizeDelta.y);  
  104.             m_listBg.pivot new Vector2(0.5f, 1f);  
  105.             m_listBg.localPosition new Vector3(0m_listBgOffset m_itemHeight 0.5f, 0);  
  106.          
  107.         else  
  108.          
  109.             m_listPanel.transform.localPosition new Vector2(0GetComponent().sizeDelta.y);  
  110.             m_listBg.pivot new Vector2(0.5f, 0f);  
  111.             m_listBg.localPosition new Vector3(01 m_listBgOffset m_itemHeight 0.5f, 0);  
  112.          
  113.         return itemList;  
  114.      
  115.   
  116.     private void OnClickBtn(GameObject go)  
  117.      
  118.         if (m_listPanel.activeSelf)  
  119.             Hide();  
  120.         else  
  121.             Show();  
  122.      
  123.   
  124.     private void OnHoverItem(GameObject go, bool isHover)  
  125.      
  126.         if (isHover)  
  127.             m_foucs.localPosition go.transform.localPosition;  
  128.      
  129.   
  130.     private void OnClickItem(GameObject go)  
  131.      
  132.         int index (int)UIEventListener.Get(go).parameter;  
  133.         SetText(index);  
  134.         Hide();  
  135.      
  136.   
  137.     private void OnHoverPanel(GameObject go, bool isHover)  
  138.      
  139.         if (!isHover)  
  140.             Hide();  
  141.      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值