package com.example.myweek; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; public class MyView extends ViewGroup { public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { this (context, attrs,0); } 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 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; linewidth=childwidth; totalheight+= lineheight = Math.max(lineheight,childheight); }else{ linewidth += childwidth; totalheight+= 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 = childView.getMeasuredWidth(); childheight = childView.getMeasuredHeight(); if (linewidth + childwidth>getMeasuredWidth()){ LayoutChildView(childView, 0,totalheight, childwidth, totalheight + childheight); linewidth=childwidth; totalheight+=childheight; }else{ LayoutChildView(childView, linewidth,totalheight,linewidth + childwidth, totalheight + childheight); totalheight+=childheight; linewidth+=childwidth; } } } private void LayoutChildView(View childView, int l, int t, int r, int b) { childView.layout(l,t,r,b); } }
MyView
最新推荐文章于 2020-05-20 21:44:59 发布