code: /*
   *
   *     Copyright (C) 2015 Ingo Fuchs
   *     This program is free software; you can redistribute it and/or modify
   *     it under the terms of the GNU General Public License as published by
   *     the Free Software Foundation; either version 2 of the License, or
   *     (at your option) any later version.
   *
   *     This program is distributed in the hope that it will be useful,
   *     but WITHOUT ANY WARRANTY; without even the implied warranty of
   *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *     GNU General Public License for more details.
   *
   *     You should have received a copy of the GNU General Public License along
   *     with this program; if not, write to the Free Software Foundation, Inc.,
   *     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
   * /
   */
  
  package freed.views;
  
  import android.content.Context;
  import android.util.AttributeSet;
  import android.view.TextureView;
  
  import freed.utils.Log;
  
  /**
   * A {@link TextureView} that can be adjusted to a specified aspect ratio.
   */
  public class AutoFitTextureView extends TextureView /*implements  AbstractModeParameter.I_ModeParameterEvent*/ {
  
      private static final String TAG = AutoFitTextureView.class.getSimpleName();
      private int mRatioWidth;
      private int mRatioHeight;
      Context context;
  
      public AutoFitTextureView(Context context) {
          this(context, null);
          this.context = context;
      }
  
      public AutoFitTextureView(Context context, AttributeSet attrs) {
          this(context, attrs, 0);
          this.context = context;
      }
  
      public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) {
          super(context, attrs, defStyle);
          this.context = context;
      }
  
      /**
       * Sets the aspect ratio for this view. The size of the view will be measured based on the ratio
       * calculated from the parameters. Note that the actual sizes of parameters don't matter, that
       * is, calling setAspectRatio(2, 3) and setAspectRatio(4, 6) make the same result.
       *
       * @param width  Relative horizontal size
       * @param height Relative vertical size
       */
      public void setAspectRatio(int width, int height) {
          if (width < 0 || height < 0) {
              throw new IllegalArgumentException("Size cannot be negative.");
          }
          Log.d(TAG, "setAspectRatio to " + width + "/"+height);
          mRatioWidth = width;
          mRatioHeight = height;
          this.post(() -> requestLayout());
  
      }
  
  
  
      @Override
      protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
          super.onLayout(changed, left, top, right, bottom);
      }
  
      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  
          /*int width = MeasureSpec.getSize(widthMeasureSpec);
          int height = MeasureSpec.getSize(heightMeasureSpec);
          setMeasuredDimension(width, height);*/
  /*        if (mRatioWidth == 0 || mRatioHeight == 0) {
              setMeasuredDimension(width, height);
          } else {
              int h = height * mRatioWidth / mRatioHeight;
              int w = width * mRatioHeight / mRatioWidth;
              if (width > h) {
  
                  setMeasuredDimension(w, h);
              } else {
                  setMeasuredDimension(h, w);
              }
          }*/
      }
  
  }
  