功能的重点在于如何正确的通过传入的页码数据计算要显示出来的页码。
所以说首先要确定页码的总数,和页面上最多显示多少个按钮(包括 ‘…’)
在这里作者就不全部列出来了,只展示一个核心方法,
/// <summary>
/// 获取当前所需显示的页码
/// </summary>
/// <param name="show">页码缓存器(传入一个长度为0的list即可)</param>
/// <param name="page">选择的页码</param>
/// <param name="number">当前方法调用的次数(使用时无需传值 默认为0即可)</param>
public void GetShowPage(List<int> show, int page,int number=0)
{
if (number==0) //如果调用次数为0 添加选择的页码到列表
show.Add(page);
if (page- number > 1) //添加选择的页码前边一页到列表
show.Insert(0, page - (1+ number));
if (page + number < PageNumber) //添加选择的页码后边一页到列表
show.Add(page + (1 + number));
if (show.Count < ShowLength) //判断列表是否达到上限
GetShowPage(show, page, number + 1); //如果没有达到上限 继续相同操作 调用次数(number) +1
else
{
//如果达到 则做处理
//-1表示该位置显示更多 非-1 则正常显示页码
//页码列表两端分别显示1 和最大页码
//如果前排非1
if (show.Count > 2 && show[0] > 1)
{
show[0] = 1;
show[1] = -1;
}
//如果后排非最大页码
if (show.Count > 2 && show[show.Count - 1] < PageNumber)
{
show[show.Count - 1] = PageNumber;
show[show.Count - 2] = -1;
}
}
}
PageNumber 代表页码总数
ShowLength 代表页码最多显示多少个按钮 ------单数最好
执行完毕后 List 中 0以上的 就是正常显示的页码,如果出现-1 则表示当前节点需要显示‘…’
此方法只是作者的个人习惯,并不代表是最简单的方法。
在贴一个初始值的方法吧
/// <summary>
/// 创建翻页器
/// </summary>
/// <param name="pagenumber">页码长度 >=0</param>
/// <param name="flippage">翻页事件</param>
public void Create(int pagenumber,System.Action<int> flippageEvent)
{
CurrentPage = -1;
Field.text = "";
//保存回调委托
FlipPageEvent = flippageEvent;
//页码最大长度
PageNumber = pagenumber<0?0:pagenumber;
//当前最多显示的数量
ShowLength = PageNumber < MaxShowLength ? PageNumber : MaxShowLength;
//默认打开第一页 此方法中处理了一些 UI上的逻辑 会调用 GetShowPage 进行创建UI
PageMenuEvent(ShowLength > 0 ? 1 : 0);
}