源码已放入我的 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边界的行数或列数,然后乘以每行列的数量,即为滑出的元素数(注意,还需处理最后一列未满的情况)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)