/* * 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.os.Build; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.TintTypedArray; import android.util.AttributeSet; import me.zhanghai.android.douya.R; /** * @deprecated Use {@link NestedRatioHeightRecyclerView} instead for most of the time. */ public class RatioHeightRecyclerView extends RecyclerView { private float mRatio; public RatioHeightRecyclerView(Context context) { super(context); init(null, 0); } public RatioHeightRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); init(attrs, 0); } public RatioHeightRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs, defStyle); } @SuppressWarnings("RestrictedApi") private void init(AttributeSet attrs, int defStyle) { TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs, R.styleable.RatioHeightRecyclerView, defStyle, 0); String ratio = a.getString(R.styleable.RatioHeightRecyclerView_ratio); if (ratio != null) { int colonIndex = ratio.indexOf(':'); if (colonIndex < 0) { throw new IllegalArgumentException( "ratio should be a string in the form \"width:height\": " + ratio); } int width = Integer.parseInt(ratio.substring(0, colonIndex)); int height = Integer.parseInt(ratio.substring(colonIndex + 1)); mRatio = (float) width / height; } a.recycle(); } public float getRatio() { return mRatio; } public void setRatio(float ratio) { if (mRatio != ratio) { mRatio = ratio; requestLayout(); invalidate(); } } public void setRatio(float width, float height) { setRatio(width / height); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mRatio > 0) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = Math.round(width / mRatio); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { height = Math.max(height, getMinimumHeight()); } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }