package bwei.com.zhou1_demo; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; public class FlowLayout extends ViewGroup { private int widthSize; private int widthMode; private int heghtSize; private int heightMode; public FlowLayout(Context context) { super(context); } public FlowLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { measureChildren(widthMeasureSpec, heightMeasureSpec); widthSize = MeasureSpec.getSize(widthMeasureSpec); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int width = 0; int height = 0; int lineWidth = 0; int lineHeight = 0; int totalHeight = 0; View childView; int childWidth = 0; int childHeight = 0; for (int i = 0; i < getChildCount(); i++) { childView = getChildAt(i); childWidth = childView.getMeasuredWidth(); childHeight = childView.getMeasuredHeight(); if (lineWidth+childWidth>= widthSize) { width = widthSize; totalHeight += lineHeight; lineHeight = childHeight; lineWidth = childWidth; } else { lineWidth += childWidth; lineHeight = Math.max(lineHeight, childHeight); width = Math.max(width, lineWidth); } if (i == getChildCount() - 1) { totalHeight += lineHeight; height = totalHeight; } } width = widthMode == MeasureSpec.EXACTLY ? widthSize : width; height = heightMode == MeasureSpec.EXACTLY ? heightSize : height; setMeasuredDimension(width, height); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int lineWidth = 0; int lineHeight = 0; int totalHeight = 0; View childView; int childWidth = 0; int childHeight = 0; for (int i = 0; i < getChildCount(); i++) { childView = getChildAt(i); childWidth=widthSize/2; childHeight=childView.getMeasuredHeight(); if (i%2==0){ totalHeight+=childHeight; lineWidth=0; childView.layout(lineWidth,totalHeight,lineWidth+childWidth,totalHeight+childHeight); }else{ totalHeight+=childHeight; lineWidth=childWidth; childView.layout(lineWidth,totalHeight,lineWidth+childWidth,totalHeight+childHeight); } } } }
自定义view梯式布局
最新推荐文章于 2022-10-25 00:43:14 发布