content: package com.knight.arch.ui.misc;
  
  import android.content.Context;
  import android.content.res.TypedArray;
  import android.util.AttributeSet;
  import android.widget.ImageView;
  
  
  import com.knight.arch.R;
  
  import static android.view.View.MeasureSpec.EXACTLY;
  
  /**
   * from  jakewharton u2020
   */
  public final class AspectRatioImageView extends ImageView {
      private final int widthRatio;
      private final int heightRatio;
  
      public AspectRatioImageView(Context context, AttributeSet attrs) {
          super(context, attrs);
  
          TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AspectRatioImageView);
          widthRatio = a.getInteger(R.styleable.AspectRatioImageView_widthRatio, 1);
          heightRatio = a.getInteger(R.styleable.AspectRatioImageView_heightRatio, 1);
          a.recycle();
      }
  
      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          int widthMode = MeasureSpec.getMode(widthMeasureSpec);
          int widthSize = MeasureSpec.getSize(widthMeasureSpec);
          int heightMode = MeasureSpec.getMode(heightMeasureSpec);
          int heightSize = MeasureSpec.getSize(heightMeasureSpec);
  
          if (widthMode == EXACTLY) {
              if (heightMode != EXACTLY) {
                  heightSize = (int) (widthSize * 1f / widthRatio * heightRatio);
              }
          } else if (heightMode == EXACTLY) {
              widthSize = (int) (heightSize * 1f / heightRatio * widthRatio);
          } else {
              throw new IllegalStateException("Either width or height must be EXACTLY.");
          }
  
          widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, EXACTLY);
          heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, EXACTLY);
  
          super.onMeasure(widthMeasureSpec, heightMeasureSpec);
      }
  }
  