app/src/main/java/me/zhanghai/android/douya/ui/MaxDimensionHelper.java

(完整代码) 1KB

/*
 * 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;
    }

    public void onInit(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);
    }
}

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。