Нарисуйте холст в PreviewView - PullRequest
       75

Нарисуйте холст в PreviewView

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

Я использую новую библиотеку camerax для отображения предварительного просмотра камеры с использованием компонента PreviewView. У меня есть объект canvas, и я хочу показать его в окне предварительного просмотра камеры. как я могу это сделать?

Вот файл XML

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraint_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/black"
        tools:context=".MainActivity">

        <androidx.camera.view.PreviewView
            android:id="@+id/view_finder"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Я пытался использовать метод draw в ViewFinder, но он не работал

val canvas = Canvas()

paint.apply {
    color = Color.RED
    textSize = 80.0f
    strokeWidth = 8.0f
}

canvas.drawLine(0f,0f,50f,50f,paint)
binding.viewFinder.draw(canvas)

Существует способ рисовать холст при предварительном просмотре камеры, но он работает только для SurfaceView, а не PreviewView.

surfaceHolder = surfaceView!!.holder
val canvas: Canvas = surfaceHolder!!.lockCanvas()

paint.apply {
    color = Color.RED
    textSize = 80.0f
    strokeWidth = 8.0f
}

canvas.drawLine(0f,0f,50f,50f,paint)
surfaceHolder!!.unlockCanvasAndPost(canvas)

Проблема в том, что SurfaceView работает только с библиотекой camera2, и я не могу использовать ее с camerax. Если решение заключается в использовании SurfaceView, как я могу сделать это с camerax?

...