Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Android camera2进行全屏预览大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用新的camera2 API构建自定义相机.我的代码基于Google here提供的代码示例.

我无法找到一种方法来全屏显示相机.在代码示例中,他们使用比率优化来适应所有屏幕,但它只占屏幕高度的3/4左右.

这是我的AutoFitTextureView代码

public class AutoFitTextureView extends TextureView {

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,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.");
    }
    mRatioWidth = width;
    mRatioHeight = height;
    requestLayout();
}

@Override
protected void onMeasure(int widthMeasureSpec,int heightMeasureSpeC) {
    super.onMeasure(widthMeasureSpec,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);
        }
    }
}

}

非常感谢您的帮助.

解决方法

这是您的问题的解决方案.在此 line中,纵横比设置为3/4.我更改了chooseVideSize方法,为MediaRecorder选择具有高清分辨率的视频大小.
private static Size chooseVideoSize(Size[] choices) {
        for (Size size : choices) {
            // Note that it will pick only HD video size,you should create more robust solution depending on screen size and available video sizes
            if (1920 == size.getWidth() && 1080 == size.getHeight()) {
                return size;
            }
        }
        Log.e(tag,"Couldn't find any suitable video size");
        return choices[choices.length - 1];
    }

然后我更正了this method以根据视频大小纵横比选择预览尺寸,结果如下.

private static Size chooSEOptimalSize(Size[] choices,int width,int height,Size aspectRatio) {
    // Collect the supported resolutions that are at least as big as the preview Surface
    List<Size> bigEnough = new ArrayList<Size>();
    int w = aspectRatio.getWidth();
    int h = aspectRatio.getHeight();
    double ratio = (doublE) h / w;
    for (Size option : choices) {
        double optionRatio = (doublE) option.getHeight() / option.getWidth();
        if (ratio == optionRatio) {
            bigEnough.add(option);
        }
    }

    // Pick the smallest of those,assuming we found any
    if (bigEnough.size() > 0) {
        return Collections.min(bigEnough,new CompareSizesByArea());
    } else {
        Log.e(tag,"Couldn't find any suitable preview size");
        return choices[1];
    }
}

我希望它会对你有所帮助!

大佬总结

以上是大佬教程为你收集整理的使用Android camera2进行全屏预览全部内容,希望文章能够帮你解决使用Android camera2进行全屏预览所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。