package com.mozz.htmlnative.view;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsoluteLayout;
import com.google.android.flexbox.FlexboxLayout;
/**
* @author Yang Tao, 17/5/12.
*/
public class LayoutParamsLazyCreator {
public int width = ViewGroup.LayoutParams.WRAP_CONTENT;
public int height = ViewGroup.LayoutParams.WRAP_CONTENT;
public int marginLeft;
public int marginTop;
public int marginRight;
public int marginBottom;
public int left;
public int top;
public LayoutParamsLazyCreator() {
}
public LayoutParamsLazyCreator(ViewGroup.LayoutParams params) {
width = params.width;
height = params.height;
if (params instanceof ViewGroup.MarginLayoutParams) {
marginLeft = ((ViewGroup.MarginLayoutParams) params).leftMargin;
marginTop = ((ViewGroup.MarginLayoutParams) params).topMargin;
marginRight = ((ViewGroup.MarginLayoutParams) params).rightMargin;
marginBottom = ((ViewGroup.MarginLayoutParams) params).bottomMargin;
}
if (params instanceof AbsoluteLayout.LayoutParams) {
left = ((AbsoluteLayout.LayoutParams) params).x;
top = ((AbsoluteLayout.LayoutParams) params).y;
}
}
public LayoutParamsLazyCreator(int width, int height, int marginLeft, int marginTop, int
marginRight, int marginBottom, int left, int top) {
this.width = width;
this.height = height;
this.marginLeft = marginLeft;
this.marginTop = marginTop;
this.marginRight = marginRight;
this.marginBottom = marginBottom;
this.left = left;
this.top = top;
}
public void setMargins(int left, int top, int right, int bottom) {
marginLeft = left;
marginTop = top;
marginRight = right;
marginBottom = bottom;
}
public ViewGroup.MarginLayoutParams toMarginLayoutParams() {
ViewGroup.MarginLayoutParams marginLayoutParams = new ViewGroup.MarginLayoutParams(width,
height);
marginLayoutParams.setMargins(marginLeft, marginTop, marginRight, marginBottom);
return marginLayoutParams;
}
public AbsoluteLayout.LayoutParams toAbsoluteLayoutParams() {
return new AbsoluteLayout.LayoutParams(width, height, left, top);
}
public FlexboxLayout.LayoutParams toFlexLayoutParams() {
FlexboxLayout.LayoutParams layoutParams = new FlexboxLayout.LayoutParams(width, height);
layoutParams.setMargins(marginLeft, marginTop, marginRight, marginBottom);
return layoutParams;
}
@Override
public String toString() {
return "width=" + width + ", height=" + height;
}
public static ViewGroup.LayoutParams createLayoutParams(View parent, LayoutParamsLazyCreator
creator) {
if (parent instanceof AbsoluteLayout) {
return creator.toAbsoluteLayoutParams();
} else if (parent instanceof HNDiv || parent instanceof HNRootView) {
return creator.toMarginLayoutParams();
} else if (parent instanceof FlexboxLayout) {
return creator.toFlexLayoutParams();
} else {
throw new IllegalArgumentException("can't create related layoutParams, unknown " +
"view type " + parent.toString());
}
}
public static void createLayoutParams(LayoutParamsLazyCreator creator, ViewGroup.LayoutParams
outParams) {
outParams.height = creator.height;
outParams.width = creator.width;
if (outParams instanceof AbsoluteLayout.LayoutParams) {
AbsoluteLayout.LayoutParams layoutParams = (AbsoluteLayout.LayoutParams) outParams;
layoutParams.x = creator.left;
layoutParams.y = creator.top;
} else if (outParams instanceof ViewGroup.MarginLayoutParams) {
((ViewGroup.MarginLayoutParams) outParams).setMargins(creator.marginLeft, creator
.marginTop, creator.marginRight, creator.marginBottom);
} else {
throw new IllegalArgumentException("can't create related layoutParams, unknown " +
"layoutParams type " + outParams.toString());
}
}
}