package net.trippedout.android.shadercamera.view; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.TextureView; /** * TODO - figure out why the fuck we really need to do this. * Code originally taken from Camera2 api samples on github/googlesamples */ public class AutoFitTextureView extends TextureView { private static final String TAG = AutoFitTextureView.class.getSimpleName(); private int mRatioWidth = 0; private int mRatioHeight = 0; public AutoFitTextureView(Context context) { this(context, null); } public AutoFitTextureView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * 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() " + width + ", " + height); mRatioWidth = width; mRatioHeight = height; requestLayout(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(width, width); // keep square // if (0 == mRatioWidth || 0 == mRatioHeight) { // setMeasuredDimension(width, height); // } else { // if (width < height * mRatioWidth / mRatioHeight) { // setMeasuredDimension(width, width * mRatioHeight / mRatioWidth); // } else { // setMeasuredDimension(height * mRatioWidth / mRatioHeight, height); // } // } } }