基于FLOWLAYOUT的改造,支持每行最大个数和每行元素高度居中。

来源:互联网 发布:apple pencil配套软件 编辑:程序博客网 时间:2024/06/08 18:03

需求

产品要求做一个控件,当元素个数超过4个的时候自动换行。然后界面中每个元素都是高度居中的,每个元素有固定的间距。

FLOWLAYOUT

参考了
http://blog.csdn.net/lmj623565791/article/details/38352503/
本文也是基于着部分代码进行了定制。

固定元素个数换行

if ((lineUsed + spaceWidth > widthSize) || (lineCount > nums))

在onMeasure和onLayout换行判断的时候,计算当前行的元素个数,当当前行的元素个数大于设定值的时候同lineUsed + spaceWidth > widthSize,元素位置不足时换行的逻辑。

单个元素高度居中

每行的元素高度可能各不相同,原先的代码中通过

 if (spaceHeight > lineHeight) {                lineHeight = spaceHeight;            }

计算每行元素的最大高度,目前采用的方案是在onMeasure时记录每行的最大高度。

      lineHeightList.add(lineHeight);

在onLayout计算高度偏移位置,放置对应的元素,具体的代码如下:

int gap = 0;            if (null != lineHeightList.get(lineCount)) {                int lineMaxHeight = lineHeightList.get(lineCount);                if (CENTER == gravity)                    gap = (lineMaxHeight - bottom + top + 1) / 2;                if (BOTTOM == gravity)                    gap = lineMaxHeight - bottom + top;            }            if (gap < 0)                gap = 0;            child.layout(left, top + gap, right, bottom + gap);
阅读全文
0 0