unity组件UIScrollView下拉加载新的数据
来源:互联网 发布:甲骨文云计算大会 编辑:程序博客网 时间:2024/06/14 03:27
前提
今天记录的是我在项目中遇到的一个小需求,关于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组件 显示信息区别每一条列表信息
二:预制件的代码
在预制件上我添加了ItemControl 脚本用来简单的控制单条信息的显示,代码如下:
非常简单,获取到子物体上的Text组件并且进行赋值。
三:主要控制代码
接下来就是主要的代码了,我在Panel上添加了一个test脚本,继承MonoBehaviour,与IEndDragHandler接口,并且实现IEndDragHandler接口中的OnEndDrag()方法,当我们滑动列表结束的时候将会调用OnEndDrag()方法,注意在这里不是滑动到列表的最下面时调用,而是我们每一次滑动结束时这个方法就会被触发。
1、首先绑定我们需要的 scrollbar ,GridLayoutGroup 还有我们的预制件
public Scrollbar bar;//获得Scrollbar组件 public GridLayoutGroup vGroup;//获得GridLayoutGroup组件 public ItemControl item;//添加预制件
2、在Start方法中 初始化数据与列表的状态
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<ItemControl>().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; }
4、接下来就要实现刷新了,开始我们实现了OnEndDrag()方法,用来检测滑动结束,所有我们的刷新就在放在这里,然后我们通过bar.value的值来判断有没有到最后一条数据,bar.value值永远都是从0~1进行改变,之前我们也选择的是从下到上,所以0就代表了最下面 , 1 代表顶层。
代码如下:
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<ItemControl>().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不会显示出来
五:总结
到这里今天的记录就到这里了,非常简单,可以在这基础上添加 异步读取数据,添加加载时的提示等等。
阅读全文
0 0
- unity组件UIScrollView下拉加载新的数据
- jquery实现瀑布流效果+下拉加载新数据
- 为easyui组件datagrid在加载完之后追加新的数据行
- 关于UIScrollView的下拉刷新
- unity中对于scrollview下拉加载的方法
- iOS UIScrollView 的下拉刷新和上拉加载的实现
- IOS-给UIScrollView(包括继承它的UITableView、UICollectionView)添加下拉刷新-上拉加载更多
- Unity动态加载文本数据的方法
- 页面下拉加载数据
- 页面下拉加载数据
- 页面的下拉加载效果基于ajax加载数据
- IOS学习(十三)UIScrollView下拉加载更多
- 最简单的UIScrollView 下拉刷新思路
- 一种加载TreeView数据的新写法
- 基于Ajax技术实现的下拉数据表格组件
- 如何做滚动加载?移动端下拉加载新的页面
- Unity 小案例 加载新场景时数据持久化简单存储
- listView下拉刷新加载数据
- DOM元素的特性(Attribute)和属性(Property)
- Swift4.0结构体基础知识点
- [NOIP2008]双栈排序 【二分图 + 模拟】
- lwip之数据收发流程
- spark join shuffle 数据读取的过程
- unity组件UIScrollView下拉加载新的数据
- Git时间 —— 初始版本控制工具
- android webview实现拍照
- Swift4.0 函数的定义
- 第九单元
- Opencv分水岭算法——watershed自动图像分割用法
- mysql 保存中文遇到的问题
- maven:Java heap space内存不足错误的解决方法
- # JSP中scope域主要作用