更新我们的应用程序后,我们现在使用 Camera2 API,不幸的是预览在我们的测试设备上被拉伸(stretch):Samsung SM-J330F/DS,Android 版本 8.0.0,API 26
因为我们在同一台设备上使用 Google 的 Camera2Basic 项目时没有遇到这个问题,所以我们尝试调整我们的项目以使用相同的预览实现。目前,我们无法弄清楚两个项目之间不同预览的确切原因。
这是预期的:
与 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/