UGUI scrollView基本操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011484013/article/details/72236341

滚动条 scrollRect,Mask,GridLayout

ScrollRect基本属性
content 需要滑动的对象
horizontal/vertical 滚动方式 水平/垂直
moveMentType 移动类型 unrestricted /Elastic/clamped 自由的/有弹性的/夹紧的
inertial 惯性值

Mask

控制scroll下面的字对象超出scroll的范围,不进行显示
这里写图片描述

GridLayoutGroup 网格布局
Padding 偏移量,一般不需要调节
cellSize 每一字网格的尺寸
spacing 网格之际的间隔

startCorner 开始的角,左角,右角
startAxis 开始的轴向
childAligment 字对象 最对象的位置(可以把grid尺寸设置大一些,查看字对象的位置)
constraint 约束,限制字对象的排列方式,包括自适应,根据行数自适应,根据列数自适应。

这里写图片描述

通过代码,动态添加字对象

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class scrowTest : MonoBehaviour {
    public GameObject itemPrefab;
    public ScrollRect scroll;
    public GridLayoutGroup grid;
    public int AllCount=30;
    // Use this for initialization
    void Start () {
        initScrollItem ();
    }

    // Update is called once per frame
    void Update () {

    }

    void initScrollItem(){

        for (int i = 0; i < AllCount; i++) {
            GameObject itemObj = Instantiate (itemPrefab,grid.transform) as GameObject;
            itemObj.GetComponent<imageItem> ().setData ("image"+i);
        }
        float colums = grid.constraintCount;//分4列显示

        int rows = Mathf.CeilToInt (grid.transform.childCount/colums);
        //设置grid的大小,如果grid太小,则无法滚动,因此grid的大小需要和所有字对象的大小保持一致
        grid.GetComponent<RectTransform> ().SetSizeWithCurrentAnchors (RectTransform.Axis.Vertical,(grid.cellSize.y+grid.spacing.y)*rows);
        grid.GetComponent<RectTransform> ().SetSizeWithCurrentAnchors (RectTransform.Axis.Horizontal,(grid.cellSize.x+grid.spacing.x)*colums);
        scroll.verticalNormalizedPosition = 1;//初始化scroll的位置
        scroll.horizontalNormalizedPosition=0;

    }
}

运行效果
这里写图片描述

这里写图片描述

实现简单的分页效果,优化实例化对象个数

代码如下

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
enum ItemType{
    One,
    Two,
    Three,
    Four
}
public class scrowTest : MonoBehaviour {
    public GameObject itemPrefab;
    public ScrollRect scroll;
    public GridLayoutGroup grid;
    public int AllCount=30;
    public Button btn1,btn2,btn3,btn4;
    private ItemType iType;
    private int listCount=0;
    private List<GameObject> itemList = new List<GameObject> ();
    public Image img;
    // Use this for initialization
    void Start () {
        iType = ItemType.One;
//      initScrollItem ();
        btn1.onClick.AddListener (OnBtn1Click);
        btn2.onClick.AddListener (OnBtn2Click);
        btn3.onClick.AddListener (OnBtn3Click);
        btn4.onClick.AddListener (OnBtn4Click);
        OnBtn1Click ();
        img.transform.SetAsLastSibling ();
    }

    // Update is called once per frame
    void Update () {

    }

    void OnBtn1Click(){
        iType = ItemType.One;
        listCount = 18;
        ResetScrollList ();
    }

    void OnBtn2Click(){
        iType = ItemType.Two;
        listCount = 40;
        ResetScrollList ();
    }

    void OnBtn3Click(){
        iType = ItemType.Three;
        listCount = 25;
        ResetScrollList ();
    }

    void OnBtn4Click(){
        iType = ItemType.Four;
        listCount = 18;
        ResetScrollList ();
    }

    void ResetScrollList(){
        int offsetCount = listCount - itemList.Count;
        if (offsetCount <= 0) {
//          string data;
            for (int i = 0; i < itemList.Count; i++) {
                GameObject itemObj = itemList [i];
                if(itemObj!=null){
                    itemObj.GetComponent<imageItem> ().setData (iType.ToString()+"------"+i);
                    itemObj.SetActive (true);
                    string data = iType.ToString () + " this is " + i + " grid!";
                    itemObj.transform.FindChild ("btn").GetComponent<Button> ().onClick = new Button.ButtonClickedEvent ();
                    itemObj.transform.FindChild ("btn").GetComponent<Button> ().onClick.AddListener (delegate() {
                        Debug.Log(data);
                    });
                }
            }
            int limitCount = -offsetCount+listCount;
            for (int i = listCount; i < limitCount; i++) {
                itemList [i].SetActive (false);
            }
        } else {

//          string data;
            for (int i = 0; i < itemList.Count; i++) {
                GameObject itemObj = itemList [i];
                if(itemObj!=null){
                    itemObj.GetComponent<imageItem> ().setData (iType.ToString()+"------"+i);
                    itemObj.SetActive (true);
                    string data = iType.ToString () + " this is " + i + " grid!";
                    itemObj.transform.FindChild ("btn").GetComponent<Button> ().onClick = new Button.ButtonClickedEvent ();
                    itemObj.transform.FindChild ("btn").GetComponent<Button> ().onClick.AddListener (delegate() {
                        Debug.Log(data);
                    });
                }

            }

            for (int i = 0; i < offsetCount; i++) {
                GameObject itemObj = Instantiate (itemPrefab,grid.transform) as GameObject;
                itemObj.GetComponent<imageItem> ().setData (iType.ToString()+"------new:"+(i));
                itemList.Add (itemObj);
                string data = iType.ToString () + " this is " + i + " grid!";
                itemObj.transform.FindChild ("btn").GetComponent<Button> ().onClick = new Button.ButtonClickedEvent ();
                itemObj.transform.FindChild ("btn").GetComponent<Button> ().onClick.AddListener (delegate() {
                    Debug.Log(data);
                });
            }

        }

        float colums = grid.constraintCount;//分4列显示

        int rows = Mathf.CeilToInt (listCount/colums);
        //设置grid的大小,如果grid太小,则无法滚动,因此grid的大小需要和所有字对象的大小保持一致
        grid.GetComponent<RectTransform> ().SetSizeWithCurrentAnchors (RectTransform.Axis.Vertical,(grid.cellSize.y+grid.spacing.y)*rows);
        grid.GetComponent<RectTransform> ().SetSizeWithCurrentAnchors (RectTransform.Axis.Horizontal,(grid.cellSize.x+grid.spacing.x)*colums);
        scroll.verticalNormalizedPosition = 1;//初始化scroll的位置
        scroll.horizontalNormalizedPosition=0;
    }


}

运行效果
这里写图片描述

demo 下载:http://download.csdn.net/detail/u011484013/9842959

相关博客:http://blog.csdn.net/u011484013/article/details/72081793
http://www.cnblogs.com/zhaoqingqing/p/3973167.html?utm_source=tuicool

猜你喜欢

转载自blog.csdn.net/u011484013/article/details/72236341
今日推荐