Как установить правильное соотношение сторон с помощью CameraX? - PullRequest
1 голос
/ 23 мая 2019

Я слежу за 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) для настройки предварительного просмотра в соответствии с размером предварительного просмотра.

CameraX wrong aspect ratio

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

ты пробовал?

    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

Я бы порекомендовал вам установить ширину и высоту для вашего TextureView, используя dp или constaraints.Дайте мне знать, если это работает для вас, спасибо!

0 голосов
/ 23 мая 2019

Вы можете установить соотношение сторон TextureView с помощью Matrix следующим образом:

Matrix txform = new Matrix();
textureView.getTransform(txform);
txform.setScale((float) = videoWidth / viewWidth, (float) videoHeight / viewHeight);// aspect ratio
textureView.setTransform(txform); // apply matrix
...