108 lines
3.5 KiB
Java
108 lines
3.5 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|