Как установить размер предварительного просмотра на cameraX preview? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь создать предварительный просмотр в портретном режиме и хочу, чтобы предварительный просмотр был таким же широким, как экран, и оборачивал содержимое по вертикали. Однако, когда я делаю это, я всегда получаю размер предварительного просмотра 1200x 1200, и предварительный просмотр растягивается по горизонтали, чтобы заполнить экран.

Захваченное изображение имеет правильный размер (1024x768.

Другими словами, я хочу, чтобы размер предварительного просмотра был таким же, как у захваченного изображения.

Любая помощь будет приветствуется.

preview = new Preview.Builder()
            .setTargetAspectRatioCustom(new Rational(3, 4))
            .build();
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.molescope.CameraXActivity">

    <androidx.camera.view.PreviewView
        android:id="@+id/preview_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <ImageButton
        android:id="@+id/capture_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginBottom="@dimen/margin_vertical"/>


</androidx.constraintlayout.widget.ConstraintLayout>
    def camerax_version = "1.0.0-beta03"
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    implementation "androidx.camera:camera-view:1.0.0-alpha10"
    implementation "androidx.camera:camera-extensions:1.0.0-alpha10"

1 Ответ

0 голосов
/ 24 апреля 2020

Если вы хотите, чтобы предварительный просмотр соответствовал ширине экрана, вы можете проверить установку типа масштаба от PreviewView до FIT_CENTER (или FIT_START или FIT_END, в зависимости от того, как вы хотите расположить макет предварительный просмотр на экране).

Вы можете установить программный тип масштаба:

previewView.setScaleType(PreviewView.ScaleType.FIT_CENTER);

Или в файле макета:

<androidx.camera.view.PreviewView
   ...
   android:scaleType="fitCenter" />

FIT_* соответствует ширине или высоте Предварительный просмотр для соответствия ширине или высоте контейнера PreviewView (или того и другого, если контейнер и разрешение предварительного просмотра имеют одинаковое соотношение сторон), размер которого зависит от нескольких факторов, включая разрешение предварительного просмотра, естественное ориентация устройства и текущая ориентация дисплея. В результате этот подход может работать не во всех ситуациях, иногда предварительный просмотр будет заполнять ширину его контейнера, в других он будет заполнять высоту контейнера.

Если вас беспокоит аспект Отношение отображаемого предварительного просмотра, еще один способ решить вашу проблему - установить соотношение сторон PreviewView (в вашем случае я предполагаю, что это будет 3x4), и установить PreviewView для использования FIT_CENTER типа масштаба.

...