android - 如何使用 CameraX 设置正确的纵横比?

标签 android android-jetpack android-camerax

我正在关注 CameraX codelab即使使用 setTargetAspectRatiosetTargetResolution 方法,我在预览时也得到错误的纵横比。

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 的现有属性)来调整,那就太好了预览到预览大小。

CameraX wrong aspect ratio

最佳答案

你试过了吗?

    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 设置宽度和高度。 让我知道它是否适合您,谢谢!

关于android - 如何使用 CameraX 设置正确的纵横比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266280/

相关文章:

android - 通过 viewmodels 与 hiltviewmodel

android - Jetpack Compose 在方向更改时保存状态

Android -- 设备解锁时会发生什么?

java - 使用 Eclipse(Android) 奇怪的错误

java - 在 Android 中以编程方式更改 AppBarLayout 高度

java - 迭代时出现 NoSuchElementException

java - 从 fragment 更改工具栏

android - 如何使用camerax前置摄像头保存正确的旋转图像?

android - 如何使用 CameraX 将 PreviewView 纵横比与捕获的图像匹配

android - 如何使用 ZXing 和 android CameraX 解码条码和二维码