/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.common.Recyclable;
/**
*
* @author sihai
*
*/
public class ExactLayout extends ViewGroup implements Recyclable {
private Drawable mBackground;
public ExactLayout(Context context)
{
super(context);
}
public ExactLayout(Context context, AttributeSet attributeset)
{
super(context, attributeset);
}
public ExactLayout(Context context, AttributeSet attributeset, int i)
{
super(context, attributeset, i);
}
public static int getMaxHeight(View aview[])
{
int i = 0;
for(int j = Math.max(-1 + aview.length, 0); j >= 0; j--)
{
View view = aview[j];
if(view != null)
i = Math.max(i, view.getMeasuredHeight());
}
return i;
}
public static void measure(View view, int i, int j, int k, int l)
{
int i1 = Math.max(i, 0);
int j1 = Math.max(k, 0);
view.measure(android.view.View.MeasureSpec.makeMeasureSpec(i1, j), android.view.View.MeasureSpec.makeMeasureSpec(j1, l));
}
public static void setCenterBounds(View view, int i, int j)
{
LayoutParams layoutparams = (LayoutParams)view.getLayoutParams();
layoutparams.verticalBound = j;
layoutparams.horizontalBound = i;
view.setLayoutParams(layoutparams);
}
public static void setCorner(View view, int i, int j)
{
LayoutParams layoutparams = (LayoutParams)view.getLayoutParams();
if(layoutparams == null)
{
layoutparams = new LayoutParams(i, j);
} else
{
layoutparams.x = i;
layoutparams.y = j;
}
view.setLayoutParams(layoutparams);
}
public static void verticallyCenter(int i, View aview[])
{
int j = Math.max(-1 + aview.length, 0);
int k = 0x7fffffff;
for(int l = j; l >= 0; l--)
{
View view1 = aview[l];
if(view1 != null)
k = Math.min(k, ((LayoutParams)view1.getLayoutParams()).y);
}
for(int i1 = j; i1 >= 0; i1--)
{
View view = aview[i1];
if(view != null)
{
LayoutParams layoutparams = (LayoutParams)view.getLayoutParams();
setCorner(view, layoutparams.x, k);
setCenterBounds(view, layoutparams.horizontalBound, i);
}
}
}
public final void addPadding(int i, int j, int k, int l)
{
setPadding(i + getPaddingLeft(), j + getPaddingTop(), k + getPaddingRight(), l + getPaddingBottom());
}
protected boolean checkLayoutParams(android.view.ViewGroup.LayoutParams layoutparams)
{
return layoutparams instanceof LayoutParams;
}
protected void dispatchDraw(Canvas canvas)
{
if(mBackground != null)
{
mBackground.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight());
mBackground.draw(canvas);
}
super.dispatchDraw(canvas);
}
public android.view.ViewGroup.LayoutParams generateLayoutParams(AttributeSet attributeset)
{
return new LayoutParams(getContext(), attributeset);
}
protected android.view.ViewGroup.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams layoutparams)
{
return new LayoutParams(layoutparams);
}
protected void onLayout(boolean flag, int i, int j, int k, int l)
{
int i1 = getChildCount();
for(int j1 = 0; j1 < i1; j1++)
{
View view = getChildAt(j1);
if(view.getVisibility() != 8)
{
LayoutParams layoutparams = (LayoutParams)view.getLayoutParams();
int k1 = view.getMeasuredWidth();
int l1 = view.getMeasuredHeight();
int i2 = getPaddingLeft() + Math.max(0, (layoutparams.horizontalBound - k1) / 2);
int j2 = getPaddingTop() + Math.max(0, (layoutparams.verticalBound - l1) / 2);
view.layout(i2 + layoutparams.x, j2 + layoutparams.y, k1 + (i2 + layoutparams.x), j2 + (l1 + layoutparams.y));
}
}
}
protected void onMeasure(int i, int j)
{
int k = 0;
int l = 0;
int i1 = getPaddingLeft() + getPaddingRight();
int j1 = getPaddingTop() + getPaddingBottom();
int k1 = android.view.View.MeasureSpec.getMode(i);
int l1 = android.view.View.MeasureSpec.getMode(j);
int i2 = android.view.View.MeasureSpec.getSize(i);
int j2 = android.view.View.MeasureSpec.getSize(j);
measureChildren(android.view.View.MeasureSpec.makeMeasureSpec(i2 - i1, k1), android.view.View.MeasureSpec.makeMeasureSpec(j2 - j1, l1));
int k2 = getChildCount();
for(int l2 = 0; l2 < k2; l2++)
{
View view = getChildAt(l2);
if(view.getVisibility() != 8)
{
LayoutParams layoutparams = (LayoutParams)view.getLayoutParams();
int i3 = layoutparams.x + view.getMeasuredWidth();
int j3 = layoutparams.y + view.getMeasuredHeight();
l = Math.max(l, i3);
k = Math.max(k, j3);
}
}
setMeasuredDimension(resolveSize(l + i1, i), resolveSize(k + j1, j));
}
public void onRecycle()
{
int i = getChildCount();
for(int j = 0; j < i; j++)
{
View view = getChildAt(j);
if(view instanceof Recyclable)
((Recyclable)view).onRecycle();
}
}
public void setBackground(Drawable drawable)
{
mBackground = drawable;
}
public static class LayoutParams extends android.view.ViewGroup.LayoutParams
{
public int horizontalBound;
public int verticalBound;
public int x;
public int y;
public LayoutParams(int i, int j)
{
super(i, j);
}
public LayoutParams(Context context, AttributeSet attributeset)
{
super(context, attributeset);
TypedArray typedarray = context.obtainStyledAttributes(attributeset, R.styleable.ExactLayout_Layout);
x = typedarray.getDimensionPixelOffset(0, 0);
y = typedarray.getDimensionPixelOffset(1, 0);
horizontalBound = typedarray.getDimensionPixelOffset(2, 0);
verticalBound = typedarray.getDimensionPixelOffset(3, 0);
typedarray.recycle();
}
public LayoutParams(android.view.ViewGroup.LayoutParams layoutparams)
{
super(layoutparams);
}
}
}