package com.xixun.xixunplayer; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; public class AbsLayout extends ViewGroup { public AbsLayout(Context context) { this(context, null); } public AbsLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AbsLayout(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } public AbsLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int count = getChildCount(); int maxHeight = 0; int maxWidth = 0; measureChildren(widthMeasureSpec, heightMeasureSpec); for(int i = 0; i < count; i++) { View child = getChildAt(i); if(child.getVisibility() != GONE) { int childRight; int childBottom; var lp = (LayoutParams) child.getLayoutParams(); childRight = lp.x + child.getMeasuredWidth(); childBottom = lp.y + child.getMeasuredHeight(); maxWidth = Math.max(maxWidth, childRight); maxHeight = Math.max(maxHeight, childBottom); } } maxWidth += getPaddingLeft() + getPaddingRight(); maxHeight += getPaddingTop() + getPaddingBottom(); maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight()); maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth()); setMeasuredDimension(resolveSizeAndState(maxWidth, widthMeasureSpec, 0), resolveSizeAndState(maxHeight, heightMeasureSpec, 0)); } @Override protected ViewGroup.LayoutParams generateDefaultLayoutParams() { return new LayoutParams(0, 0, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int count = getChildCount(); for (int i = 0; i < count; i++) { View child = getChildAt(i); if(child.getVisibility() != GONE) { var lp = (LayoutParams) child.getLayoutParams(); int childLeft = getPaddingLeft() + lp.x; int childTop = getPaddingTop() + lp.y; child.layout(childLeft, childTop, childLeft + child.getMeasuredWidth(), childTop + child.getMeasuredHeight()); } } } @Override public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) { return new LayoutParams(getContext(), attrs); } @Override protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { return p instanceof LayoutParams; } @Override protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { return new LayoutParams(p); } @Override public boolean shouldDelayChildPressedState() { return false; } public static class LayoutParams extends ViewGroup.LayoutParams { public int x; public int y; public LayoutParams(int x, int y, int width, int height) { super(width, height); this.x = x; this.y = y; } public LayoutParams(Context c, AttributeSet attrs) { super(c, attrs); } public LayoutParams(ViewGroup.LayoutParams source) { super(source); } } }