先上效果图吧:
关键逻辑在这里,分两张情况,设定每一页多少条数据,具体情况具体分析
void BindPage(int index)
{
if (pageCount == 0)
{
int canDisPlay = 0;
for (int i = 4; i > 0; i--)
{
if (canDisPlay < 4)
{
BindItem(info_[canDisPlay].transform,ilist[4-i]);
info_[canDisPlay].gameObject.SetActive(true);
}
else
{
info_[canDisPlay].gameObject.SetActive(false);
}
canDisPlay++;
}
}
else if (pageCount>1)
{
if (index == pageCount)
{
int candisplay = 0;
for (int i = 4; i > 0; i--)
{
if (candisplay < itemCount - 4 * (index - 1))
{
BindItem(info_[candisplay].transform,ilist[4*index-i]);
info_[candisplay].gameObject.SetActive(true);
}
else
{
info_[candisplay].gameObject.SetActive(false);
}
candisplay++;
}
}
else
{
for (int i = 4; i >0 ; i--)
{
BindItem(info_[4-i].transform,ilist[4*index-i]);
info_[4-i].gameObject.SetActive(true);
}
}
}
}
下面是全部代码:
using System.Collections;
using System.Collections.Generic;
using System.IO;
using DG.Tweening;
using LitJson;
using UnityEngine;
using UnityEngine.UI;
public class PageSwitch : MonoBehaviour
{
private List<Info> ilist;
public GameObject[] info_;
/// <summary>
/// 当前页面索引
/// </summary>
private int pageIndex = 1;
/// <summary>
/// 总页数
/// </summary>
private int pageCount = 0;
/// <summary>
/// 元素总个数
/// </summary>
private int itemCount = 0;
public Text num;
public Text AllNum;
public Text allItem;
private VerticalLayoutGroup v;
// Use this for initialization
void Start ()
{
v = GetComponent<VerticalLayoutGroup>();
v.enabled = false;
InitInfo();
AllNum.text = pageCount.ToString();
allItem.text = itemCount.ToString();
Sequence s = DOTween.Sequence();
for (int i = 0; i < info_.Length; i++)
{
info_[i].transform.DOLocalMoveY(-550f, 0.5f).From();
}
//s.Append(info_[4 - i].transform.DOLocalMoveY(-550f, 0.5f).From());
StartCoroutine(war());
}
IEnumerator war()
{
yield return new WaitForSeconds(0.5f);
v.enabled = true;
}
// Update is called once per frame
void Update () {
num.text = pageIndex.ToString();
}
/// <summary>
/// 初始化
/// </summary>
void InitInfo()
{
string s = File.ReadAllText(Application.dataPath + "/guzhang.txt");
JsonData js = JsonMapper.ToObject(s);
ilist = JsonMapper.ToObject<List<Info>>(js.ToJson());
itemCount = js.Count;
pageCount = js.Count % 4 == 0 ? js.Count / 4 : js.Count / 4 + 1;
BindPage(pageIndex);
}
void BindPage(int index)
{
if (pageCount == 0)
{
int canDisPlay = 0;
for (int i = 4; i > 0; i--)
{
if (canDisPlay < 4)
{
BindItem(info_[canDisPlay].transform,ilist[4-i]);
info_[canDisPlay].gameObject.SetActive(true);
}
else
{
info_[canDisPlay].gameObject.SetActive(false);
}
canDisPlay++;
}
}
else if (pageCount>1)
{
if (index == pageCount)
{
int candisplay = 0;
for (int i = 4; i > 0; i--)
{
if (candisplay < itemCount - 4 * (index - 1))
{
BindItem(info_[candisplay].transform,ilist[4*index-i]);
info_[candisplay].gameObject.SetActive(true);
}
else
{
info_[candisplay].gameObject.SetActive(false);
}
candisplay++;
}
}
else
{
for (int i = 4; i >0 ; i--)
{
BindItem(info_[4-i].transform,ilist[4*index-i]);
info_[4-i].gameObject.SetActive(true);
}
}
}
}
void BindItem(Transform tran,Info infos)
{
tran.GetChild(0).GetComponent<Text>().text = infos.name;
tran.GetChild(1).GetComponent<Text>().text = infos.age.ToString();
}
public void PreClick()
{
if (pageCount <= 0)
return;
//第一页时禁止向前翻页
if (pageIndex <= 1)
return;
pageIndex -= 1;
if (pageIndex < 1)
pageIndex = 1;
BindPage(pageIndex);
}
/// <summary>
/// 首页
/// </summary>
public void FirstPage()
{
pageIndex = 1;
BindPage(pageIndex);
}
/// <summary>
/// 尾页
/// </summary>
public void LastPage()
{
pageIndex = pageCount;
BindPage(pageIndex);
}
public void NextClick()
{
if (pageCount <= 0)
return;
//最后一页禁止向后翻页
if (pageIndex >= pageCount)
return;
pageIndex += 1;
if (pageIndex >= pageCount)
pageIndex = pageCount;
BindPage(pageIndex);
}
}
public class Info
{
public string name { get; set; }
/// <summary>
///
/// </summary>
public int age { get; set; }
}
下面是我手写的json文件,用来数据模拟填充:
[{
"name": "刘老板",
"age": 18
}, {
"name": "小红",
"age": 18
}, {
"name": "小fen",
"age": 18
},
{
"name": "小笑",
"age": 18
}, {
"name": "小ying",
"age": 18
},{
"name": "小李",
"age": 18
}, {
"name": "小红",
"age": 18
}, {
"name": "小fen",
"age": 18
},
{
"name": "小笑",
"age": 18
}, {
"name": "小ying",
"age": 18
},{
"name": "小李",
"age": 18
}, {
"name": "小红",
"age": 18
}, {
"name": "小fen",
"age": 18
},
{
"name": "小笑",
"age": 18
}, {
"name": "小ying",
"age": 18
},{
"name": "小李",
"age": 18
}, {
"name": "小红",
"age": 18
}, {
"name": "小fen",
"age": 18
},
{
"name": "小笑",
"age": 18
}, {
"name": "小ying",
"age": 18
},{
"name": "小fen",
"age": 18
},
{
"name": "小笑",
"age": 18
}, {
"name": "小ying",
"age": 18
}
]
参考文章:https://blog.csdn.net/andyhebear/article/details/50480453
本篇记录一下,需要demo源码工程的,关注一下公众号,回复关键字"分页"获取:
你的一个关注和点赞是我坚持写下去的动力