我正在使用CameraX codelab,即使使用setTargetAspectRatio
和setTargetResolution
方法,预览中的纵横比也是错误的。
private fun startCamera() {
// Create configuration object for the viewfinder use case
val previewConfig = PreviewConfig.Builder().apply {
setTargetAspectRatio(Rational(1, 1))
setTargetResolution(Size(640, 640))
}.build()
...
并且布局使用代码实验室中显示的硬编码大小。
<TextureView
android:id="@+id/view_finder"
android:layout_width="640px"
android:layout_height="640px"
...
如果库具有CameraTextureView
和属性android:scaleType
(类似于ImageView
的现有属性)来将预览调整为预览大小,那就太好了。
答案 0 :(得分:1)
您尝试过吗?
val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }
val screenSize = Size(metrics.widthPixels, metrics.heightPixels)
val screenAspectRatio = Rational(metrics.widthPixels, metrics.heightPixels)
val viewFinderConfig = PreviewConfig.Builder().apply {
//...
setTargetResolution(screenSize)
setTargetAspectRatio(screenAspectRatio)
setTargetRotation(viewFinder.display.rotation)
}.build()
val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder)
和AutoFitPreviewBuilder,您可以在这里找到: https://gist.github.com/yevhenRoman/90681822adef43350844464be95d23f1
我建议您使用dp或constaraints设置TextureView的宽度和高度。 让我知道它是否对您有用,谢谢!
答案 1 :(得分:1)
https://stackoverflow.com/a/49449986/9397052存在类似问题的解决方案。确定分辨率后,请勿使用setTargetAspectRatio
函数;相反,您应该只使用setTargetResolution
。然后它应该可以正常工作。
答案 2 :(得分:1)
根据官方Android documentation: “ 不允许在同一用例上同时设置目标纵横比和目标分辨率。”
尽管如果尝试执行此操作,编译器不会引发错误,但是可能会发生意外结果。
答案 3 :(得分:0)
您可以使用TextureView
来设置Matrix
的长宽比,如下所示:
Matrix txform = new Matrix();
textureView.getTransform(txform);
txform.setScale((float) = videoWidth / viewWidth, (float) videoHeight / viewHeight);// aspect ratio
textureView.setTransform(txform); // apply matrix