package com.loop_anime.android.ui.layout; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.FrameLayout; import com.loop_anime.android.R; /** * User: Yilun Chen * Date: 15/10/15 */ @SuppressWarnings("unused") public class AspectRatioFrameLayout extends FrameLayout { private float mAspectRatio = 1; public AspectRatioFrameLayout(Context context, float aspectRatio) { super(context); mAspectRatio = aspectRatio; } public AspectRatioFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); setAttributes(context, attrs); } public AspectRatioFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setAttributes(context, attrs); } public AspectRatioFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); setAttributes(context, attrs); } private void setAttributes(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AspectRatioFrameLayout); try { mAspectRatio = a.getFloat(R.styleable.AspectRatioFrameLayout_aspect_ratio, 1); } finally { a.recycle(); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int originalWidth = MeasureSpec.getSize(widthMeasureSpec); int desiredHeight = (int) (originalWidth * mAspectRatio); super.onMeasure( MeasureSpec.makeMeasureSpec(originalWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(desiredHeight, MeasureSpec.EXACTLY) ); } }