在真实设备上,cameraX的TextureView预览高度被拉伸了。

4
我正在尝试缩小CameraX TextureView预览的高度。
PreviewConfig previewConfig = new PreviewConfig.Builder()
                .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
                .setTargetResolution(new Size(1280, 720))
                .build();

        Preview preview = new Preview(previewConfig);

 <TextureView
        android:id="@+id/view_finder"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

如上所示,我的配置非常简单。

无论我设置什么分辨率,都根本不起作用。

有人能告诉我如何修复这个问题吗?

看一下这张图片,瓶子怎么缩小了。 enter image description here

但是我的输出是正确的。只是预览会出现这种情况。

2个回答

1

您可以在此处查看更多自定义https://github.com/android/camera-samples/blob/master/CameraXBasic/app/src/main/java/com/android/example/cameraxbasic/fragments/CameraFragment.kt

只需按步骤复制粘贴这些东西。

声明两个常量。

private double RATIO_4_3_VALUE = 4.0 / 3.0;
private double RATIO_16_9_VALUE = 16.0 / 9.0;

创建一个方法,根据移动设备选择宽高比。
public AspectRatio aspectRatio(int width, int height) {

        double previewRatio = Double.valueOf(Math.max(width, height)) / Math.min(width, height);
        if (Math.abs(previewRatio - RATIO_4_3_VALUE) <= Math.abs(previewRatio - RATIO_16_9_VALUE)) {
            return AspectRatio.RATIO_4_3;
        }
        return AspectRatio.RATIO_16_9;
    }

在startCamera方法中以完全相同的方式放置以下内容。
private void startCamera() {

        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        final DisplayMetrics displayMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(displayMetrics);
        int height = displayMetrics.heightPixels;
        int width = displayMetrics.widthPixels;


        AspectRatio screenAspectRatio = aspectRatio(width, height);
        PreviewConfig previewConfig = new PreviewConfig.Builder()
                .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
                .setTargetAspectRatio(screenAspectRatio)
                .build();


        Preview preview = new Preview(previewConfig);

这将百分之百地工作。


1
这个功能非常好用,但是我觉得它还是有点拉伸。因此,我减小了纹理视图的大小,现在它非常好用。 - shiv
@reza_khalafi,有什么问题吗?堆栈中的答案并不是永久存在的。有时由于最新的更新,代码可能无法正常工作。把它当作一个提示,编写自己的代码并运行它。 - Vikas Acharya
你知道如何执行缩放操作吗? - Pratik Pitale

0

viewFinder.setScaleType(PreviewView.ScaleType.FIT_CENTER);


1
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Tschallacka
什么是Java中的viewFinder?我找不到它。 - reza_khalafi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接