Unity 中实现可复用的 GridView

源码已放入我的 github,地址:Unity-ListView

 

效果预览:

一、确定使用参数

“GridView的参数,要怎么设计才能强大且易用”,我想了很久。
直到看了UGUI  GridLayoutGroup 的实现。发现它的设计已经很合理了,沿用即可。

原因:

1、StartCorner 和 StartAxis 可以确定出八种排布方式。

2、Constraint 为 Flexible时,Padding 可以影响自适应后的行列数。

3、Padding 和 对齐方式配合的也很巧妙。以水平为例(竖直方向同理):

        ⑴当对齐方式为水平居左时,仅 Padding.Left 有效,Padding.Right 无效。

        ⑵当对齐方式为水平居中时,Padding.Left+Padding.Right的结果为最终偏移值。

        ⑶当对齐方式为水平居右时,仅 Padding.Right 有效,Padding.Left 无效。

---------------------------------------------------------------------------------

二、参照UGUI做一些改动(还需要修改 Inspector):

1、修改 ScrollRect(仅以下两点,其余不动)。

        ⑴ 去掉其关联的 ScrollBar。(个人感觉官方就没有必要做这个关联,如果有要需求,自己实现也很简单)

        ⑵ 将 Horizontal 和 Vertical 两个bool勾选,改为枚举,因为对于GridView而言,只会同时存在一个滑动方向。

2、确定一点,布局时不套用UGUI的Layout接口,原因:

        ⑴ 只需要对当前节点布局,不需要支持嵌套(递归处理子节点)。

        ⑵ 布局参数变化时需要立即响应,不需要SetDirty机制。但是要小心避免重复刷新,保证性能。

3、Content锚点需要根据元素排布方向确定。

4、元素排布的起始轴 StartAxis 与 滑动轴 MovementAxis,轴向正好是相异的(水平/竖直)。

5、修改行列约束 Constraint,行列数一边固定,向另一边延伸。

        ⑴ 水平滑动时,Content的高由开发者手动指定,同时指定行数或自适应,然后Content的宽由元素大小和数量决定。

        ⑵ 竖直滑动时,Content的宽由开发者手动指定,同时指定列数或自适应,然后Content的高由元素大小和数量决定。

6、修改对齐方式 Alignment, 去掉滑动轴方向的对齐方式,不需要。(自由延伸,总长不定)。

---------------------------------------------------------------------------------

三、添加复用逻辑

和 之前 ListView 的复用逻辑类似,只是要注意的是:

1、要处理四种方向滑入滑出的计算(左=>右、右=>左、上=>下、下=>上)。

2、可以先算出滑出Viewport边界的行数或列数,然后乘以每行列的数量,即为滑出的元素数(注意,还需处理最后一列未满的情况)。
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值