今天记录的是我在项目中遇到的一个小需求,关于UIScrollRect组件滑动到最下面时再次滑动则可以加载数据的问题,类似于平日我们刷新微博。
在刚开始做需求的时候有点小苦恼,因为要判断列表是不是滑倒最下面一行有点小复杂,而且时间又特别急,没时间让我去研究它的源码。这时让我发现了 Scrollbar 组件,可以说是让我眼前一亮,一个非常简单的方法就出来了。关于如何使用Scrollbar 和ScrollRect组件,大家可以去百度下,我就不介绍了。
1、创建一个Canvas,在Canvas下添加Panel。
2、在Panel上添加ScroRect组件
3、在Panel下添加一个空物体 改名为Grid添加 GirdLayoutGroup与ContentSizeFitter 组件并进行相应合适的设置
4、在Canvas下添加Scroll bar,根据自己的需求去设置,这个控件就是用来判断列表是否到最底部,因为我的项目中不
需要有这个控件,所以我把控件上面的所有图片都隐藏掉了,只使用功能。
5、回来设置ScroRect组件,将Grid 与ScrollBar 拖到相应的地方
6、制作单条列表的预制件,在这里简单制作,所以我就创建了一张图片并添加了Text组件 显示信息区别每一条列表信息
public class ItemControl : MonoBehaviour { private Text tNum; public void ShowItemText(string str) { tNum = this.transform.GetComponentInChildren
非常简单,获取到子物体上的Text组件并且进行赋值。
public Scrollbar bar;//获得Scrollbar组件
public GridLayoutGroup vGroup;//获得GridLayoutGroup组件
public ItemControl item;//添加预制件
private void Start()
{
AddItem();//添加数据
//将列表移动到第一条数据
bar.value = 1;
}
在这里 bar.value=1 是因为我出现了每次加载后都是从中间的数据显示,列表移动了中间位置,并不是从第一条数据显示,估计是我哪个地方没有设置好,设置了半天又没有找到,所有直接通过滚动条的value值,把数据移动到了第一条。
3、接下来就是添加数据,每一次添加5条数据。
void AddItem() {
for (int i = 0; i < 5; i++)
{
GameObject newItem = AddItemGameobject(item.gameObject, vGroup.gameObject);
string str = "现在是第:" + indexItem + "项," + "第:" + index + "条";
newItem.GetComponent().ShowItemText(str);
}
}
public GameObject AddItemGameobject(GameObject o, GameObject parent)
{
index++;//创建的第几条数据
GameObject go = GameObject.Instantiate(o) as GameObject;
go.transform.SetParent(parent.transform);//设置父物体,将数据添加到 Grid物体下面,并且设置位置,大小。
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
return go;
}
public void OnEndDrag(PointerEventData eventData)
{
if (bar.value == 0) {//判断当最下面的时候就进行加载,同理我们做上拉刷新时,只要判断value是否等于1
indexItem++;//第几次创建
AddItem(); //加载数据
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class test : MonoBehaviour, IEndDragHandler
{
public Scrollbar bar;//获得Scrollbar组件
public GridLayoutGroup vGroup;//获得GridLayoutGroup组件
public ItemControl item;//添加预制件
private int index = 0;
private int indexItem = 1;
private void Start()
{
AddItem();//添加数据
//将列表移动到第一条数据
bar.value = 1;
}
public void OnEndDrag(PointerEventData eventData)
{
if (bar.value == 0) {//判断当最下面的时候就进行加载,同理我们做上拉刷新时,只要判断value是否等于1
indexItem++;//第几次创建
AddItem(); //加载数据
}
}
void AddItem() {
for (int i = 0; i < 5; i++)
{
GameObject newItem = AddItemGameobject(item.gameObject, vGroup.gameObject);
string str = "现在是第:" + indexItem + "项," + "第:" + index + "条";
newItem.GetComponent().ShowItemText(str);
}
}
public GameObject AddItemGameobject(GameObject o, GameObject parent)
{
index++;//创建的第几个物体
GameObject go = GameObject.Instantiate(o) as GameObject;
go.transform.SetParent(parent.transform);//设置服务体,将数据添加到 Grid物体下面
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
return go;
}
}
因为我这里隐藏了ScrollBar组件上的所有图片 所有这里ScrollBar不会显示出来