1. 程式人生 > >基於FLOWLAYOUT的改造,支援每行最大個數和每行元素高度居中。

基於FLOWLAYOUT的改造,支援每行最大個數和每行元素高度居中。

需求

產品要求做一個控制元件,當元素個數超過4個的時候自動換行。然後介面中每個元素都是高度居中的,每個元素有固定的間距。

FLOWLAYOUT

固定元素個數換行

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);