java - 以编程方式创建布局时在 Camera2 API 中预览拉伸(stretch)

标签 java android android-camera android-camera2

更新我们的应用程序后,我们现在使用 Camera2 API,不幸的是预览在我们的测试设备上被拉伸(stretch):Samsung SM-J330F/DS,Android 版本 8.0.0,API 26

因为我们在同一台设备上使用 Google 的 Camera2Basic 项目时没有遇到这个问题,所以我们尝试调整我们的项目以使用相同的预览实现。目前,我们无法弄清楚两个项目之间不同预览的确切原因。

Streched preview experienced with our preview.

这是预期的:

Correct preview of the Camera2Basic project on the same device

与 Camera2Basic 项目相比,我们的 RelativeLayout 是在 Activity 类中以编程方式创建的,然后将 AutoFitTextureView 添加到此对象:

mMainLayout = new FrameLayout(this);
mMainLayout.setBackgroundColor(Color.BLACK);
mMainLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
        LayoutParams.MATCH_PARENT));

mPreview = new AutoFitTextureView(this);
mPreview.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
        LayoutParams.MATCH_PARENT, Gravity.TOP));

mMainLayout.addView(mPreview);
this.setContentView(mMainLayout);

AutoFitTextureView 的实现与 Camera2Basic 项目中的相同。

稍后在 Camera2 类中,在 setUpCameraOutputs() 中将预览设置为 640x480 像素(所有设备都应支持的分辨率)后,我们调用 setAspectRatio(width, height):

mPreviewSize = new Size(640, 480);

if (mFrameOrientation == Configuration.ORIENTATION_LANDSCAPE) {
    mTextureView.setAspectRatio(
        mPreviewSize.getWidth(), mPreviewSize.getHeight()
    );
} else {
    mTextureView.setAspectRatio(
        mPreviewSize.getHeight(), mPreviewSize.getWidth()
    );
}

注意:同样在较新的设备(如 Honor 10)上,预览看起来不错。

最佳答案

我认为问题是您修复了 mPreviewSize 的值。由于这个原因,相机预览在某些分辨率大于 640*480 的设备中被拉伸(stretch)。

mPreviewSize 应与 AutoFitTextureView 大小相同。

mPreviewSize = new Size(mPreview.getHeight(), mPreview.getWidth());

关于java - 以编程方式创建布局时在 Camera2 API 中预览拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53674598/

相关文章:

java - Gson json解析不起作用

java - 如何知道我的应用程序正在使用哪个端口

java - Jframe 在最小化之前不显示任何内容的问题

java - AsyncTask 的 get() 方法 : Is there any scenario where it is actually the best option?

java - 如何在android中的我的自定义相机上添加自定义颜色效果

android - 检查设备是否有摄像头?

php - 如何将图像从安卓相机上传到网络服务器(不在应用程序中)

java - 保存后如何检索实体关系?

Android 在指定 requestedOrientation 时检测设备方向

java - 序列化和子类