/*
* Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.ui;
import android.content.Context;
import android.support.v7.widget.TintTypedArray;
import android.util.AttributeSet;
import android.view.View;
public class MaxDimensionHelper {
private static final int[] STYLEABLE = new int[] {
android.R.attr.maxWidth,
android.R.attr.maxHeight
};
private static final int STYLEABLE_ANDROID_MAX_WIDTH = 0;
private static final int STYLEABLE_ANDROID_MAX_HEIGHT = 1;
private Delegate mDelegate;
private int mMaxWidth;
private int mMaxHeight;
public MaxDimensionHelper(Delegate delegate) {
mDelegate = delegate;
}
@SuppressWarnings("RestrictedApi")
public void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, STYLEABLE,
defStyleAttr, defStyleRes);
mMaxWidth = a.getDimensionPixelSize(STYLEABLE_ANDROID_MAX_WIDTH, -1);
mMaxHeight = a.getDimensionPixelSize(STYLEABLE_ANDROID_MAX_HEIGHT, -1);
a.recycle();
}
public void onMeasure(int widthSpec, int heightSpec) {
if (mMaxWidth >= 0) {
widthSpec = View.MeasureSpec.makeMeasureSpec(
Math.min(View.MeasureSpec.getSize(widthSpec), mMaxWidth),
View.MeasureSpec.getMode(widthSpec));
}
if (mMaxHeight >= 0) {
heightSpec = View.MeasureSpec.makeMeasureSpec(
Math.min(View.MeasureSpec.getSize(heightSpec), mMaxHeight),
View.MeasureSpec.getMode(heightSpec));
}
mDelegate.superOnMeasure(widthSpec, heightSpec);
}
public interface Delegate {
void superOnMeasure(int widthSpec, int heightSpec);
}
}