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