都知道在进行手机相机图像预览的时候一般都会设置展示的比例为4:3或者16:9之类的,一旦设置了这写固定的比例后,在需要手机全屏展示的时候就会出现问题,会明显的看出展示的图像被挤压了,因此如何解决这么问题呢?
这里以TextureView进行展示相机镜头返回的图像。
public class TexturePreviewView extends TextureView { private Context mContext; public int mRatioWidth = 0, mRatioHeight = 0; public TexturePreviewView(@NonNull Context context) { super(context); this.mContext = context; } public TexturePreviewView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); this.mContext = context; } public TexturePreviewView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.mContext = context; } public void setAspectRatio(int width, int height) { if (width < 0 || height < 0) { throw new IllegalArgumentException("Size cannot be negative."); } mRatioWidth = width; mRatioHeight = height; requestLayout(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); 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); } } } }
接下来就是要使用Camera2进行图像预览了,至于Camera2的使用这里就不在赘述了,之前的文章里面有CSDN 或者百度一下有很多。
说下重点:
1.
这里面这个方法的调用很关键,这两个参数分别传系统相机镜头返回尺寸的高和宽,也就是说
width = 系统相机镜头传的高
heigth = 系统相机镜头传的宽
这个方法在获取到系统相机返回的寸尺之后调用这个方法即可后面的onMeasure方法里面写的不用动。
案例在此需要的自取:Camera2全屏不拉伸展示的资源-Android文档类资源-CSDN下载
day day up!