Unity 中实现可复用的 GridView

Unity 中实现可复用的 GridView,第1张

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

效果预览:

一、确定使用参数

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

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边界的行数或列数,然后乘以每行列的数量,即为滑出的元素数(注意,还需处理最后一列未满的情况)。
 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/758831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存