//左边距和上边距
int mleftMargin=20;
int mtopMargin=20;
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec,heightMeasureSpec);
//定义
int leftMargin=mleftMargin;
int topMargin=mtopMargin;
//布局初始化
int viewHeigth=0;
int viewWidth=0;
//父控件传进来的宽和高度以及对应的测量模式
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
int modewidth = MeasureSpec.getMode(widthMeasureSpec);
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
switch (modeHeight){
case MeasureSpec.AT_MOST:
int measuredHeight =0;
for (int i = 0; i <getChildCount() ; i++) {
int measuredWidth = getChildAt(i).getMeasuredWidth();
measuredHeight = getChildAt(i).getMeasuredHeight();
if(leftMargin+measuredWidth+mleftMargin>getMeasuredWidth()){
leftMargin=mleftMargin;
topMargin+=measuredHeight+mtopMargin;
}
leftMargin+=measuredWidth+mleftMargin;
}
topMargin+=measuredHeight+mtopMargin;
break;
}
Log.e("aaa",""+topMargin);
setMeasuredDimension(sizeWidth,topMargin);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int leftMargin=mleftMargin;
int topMargin=mtopMargin;
for (int i = 0; i < getChildCount(); i++) {
int measuredWidth = getChildAt(i).getMeasuredWidth();
int measuredHeight = getChildAt(i).getMeasuredHeight();
if(leftMargin+measuredWidth+mleftMargin>getWidth()){
leftMargin=mleftMargin;
topMargin+=measuredHeight+mtopMargin;
getChildAt(i).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
}else{
getChildAt(i).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
}
leftMargin+=measuredWidth+mleftMargin;
}
}