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 - 网络游戏: update the clients with deltas or with the new status

android - 使用android中的另一个 Activity 从捕获中获取图像并在另一个布局中显示图像

java - 如何将两个 jrxml jasper 报告合并为一个 pdf 输出文件

java - tomcat文件保存在什么地方

java - ActivityCompat.requestPermissions 不显示提示

java - 为什么我得到 result.get(CaptureResult.CONTROL_AF_STATE); == 无效?

android - 在模拟的 android 相机上拍照时出错

java - 改变javafx上的imageview效果

java - 如何避免Jupyter Notebook的代码单元格输出中出现多个水平滚动条?

java - android - 带有 tablayout 设置背景的折叠工具栏