Cameraandroidx jetpqck

Android CameraX 详解二 (实时预览)

2022-08-24  本文已影响0人  Kael_Zhang的安卓笔记

机票直达

Android CameraX 详解一 (引言&基础)
Android CameraX 详解二 (实时预览)
Android CameraX 详解三 (拍照)
Android CameraX 详解四 (图片分析)
Android CameraX 详解五(视频拍摄录制)

实时预览

在向应用添加预览时,请使用PreviewView这是一种可以剪裁、缩放和旋转以确保正确显示的 View
当相机处于活动状态时,图片预览会流式传输到 PreviewView 中的 Surface

使用PreviewView

如需使用 PreviewView 实现 CameraX 预览,请按以下步骤操作

<FrameLayout
    android:id="@+id/container">
        <androidx.camera.view.PreviewView
            android:id="@+id/previewView" />
</FrameLayout>
import androidx.camera.lifecycle.ProcessCameraProvider
import com.google.common.util.concurrent.ListenableFuture

class MainActivity : AppCompatActivity() {
    private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider>
    override fun onCreate(savedInstanceState: Bundle?) {
        cameraProviderFuture = ProcessCameraProvider.getInstance(this)
    }
}
cameraProviderFuture.addListener(Runnable {
    val cameraProvider = cameraProviderFuture.get()
    bindPreview(cameraProvider)
}, ContextCompat.getMainExecutor(this))
fun bindPreview(cameraProvider : ProcessCameraProvider) {
    val preview = Preview.Builder() .build()

    val cameraSelector = CameraSelector.Builder()
          .requireLensFacing(CameraSelector.LENS_FACING_BACK)
          .build()

    preview.setSurfaceProvider(previewView.getSurfaceProvider())

    cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)
}

PreviewView的渲染模式

PreviewView 可以使用以下模式之一将预览流渲染到目标 View 上:

您可以使用 PreviewView.setImplementationMode()选择适合具体应用的实现模式。如果默认的 PERFORMANCE 模式不适合您的应用,请参阅以下代码示例,了解如何设置 COMPATIBLE 模式:

// previewView is a PreviewView instance
previewView.implementationMode = PreviewView.ImplementationMode.COMPATIBLE

PreviewView的缩放模式

当预览视频分辨率与目标 PreviewView 的尺寸不同时,视频内容需要通过剪裁操作或添加遮幅式黑边来适应视图(保持原始宽高比)。为此,PreviewView 提供了以下 ScaleTypes

CameraX 使用的默认缩放类型是 FILL_CENTER。您可以使用 PreviewView.setScaleType()设置最适合具体应用的缩放类型。下面的代码示例设置了 FIT_CENTER 缩放类型:

// previewView is a PreviewView instance
previewView.scaleType = PreviewView.ScaleType.FIT_CENTER
上一篇 下一篇

猜你喜欢

热点阅读