package com.hupu.games.livegift.animation; import java.util.WeakHashMap; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; import com.hupu.games.R; /** * A ViewGroup that re-sizes the text of it's children to be no larger than the width of the view. * * @attr ref R.styleable.AutofitTextView_sizeToFit * @attr ref R.styleable.AutofitTextView_minTextSize * @attr ref R.styleable.AutofitTextView_precision */ public class AutofitLayout extends FrameLayout { private boolean mEnabled; private float mMinTextSize; private float mPrecision; private WeakHashMap<View, AutofitHelper> mHelpers = new WeakHashMap<View, AutofitHelper>(); public AutofitLayout(Context context) { super(context); init(context, null, 0); } public AutofitLayout(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, 0); } public AutofitLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context, attrs, defStyle); } private void init(Context context, AttributeSet attrs, int defStyle) { boolean sizeToFit = true; int minTextSize = -1; float precision = -1; if (attrs != null) { TypedArray ta = context.obtainStyledAttributes( attrs, R.styleable.AutofitTextView, defStyle, 0); sizeToFit = ta.getBoolean(R.styleable.AutofitTextView_sizeToFit, sizeToFit); minTextSize = ta.getDimensionPixelSize(R.styleable.AutofitTextView_minTextSize, minTextSize); precision = ta.getFloat(R.styleable.AutofitTextView_precision, precision); ta.recycle(); } mEnabled = sizeToFit; mMinTextSize = minTextSize; mPrecision = precision; } @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { super.addView(child, index, params); TextView textView = (TextView) child; AutofitHelper helper = AutofitHelper.create(textView) .setEnabled(mEnabled); if (mPrecision > 0) { helper.setPrecision(mPrecision); } if (mMinTextSize > 0) { helper.setMinTextSize(TypedValue.COMPLEX_UNIT_PX, mMinTextSize); } mHelpers.put(textView, helper); } /** * @return the {@link AutofitHelper} for this child View. */ public AutofitHelper getAutofitHelper(TextView textView) { return mHelpers.get(textView); } /** * @return the {@link AutofitHelper} for this child View. */ public AutofitHelper getAutofitHelper(int index) { return mHelpers.get(getChildAt(index)); } }