首先,在build.gradle文件中添加以下依赖项:
implementation "androidx.camera:camera-camera2:1.0.0-beta03"
在布局文件中添加TextureView,代码如下:
在Activity或Fragment中,获取CameraX的实例并绑定到TextureView上,代码如下:
val presenter = PreviewPresenter(this)
val cameraProviderFuture = ProcessCameraProvider.getInstance(this) cameraProviderFuture.addListener({ val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().apply {
setTargetRotation(Surface.ROTATION_0)
}.build()
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
try {
// Unbind use cases before rebinding
cameraProvider.unbindAll()
// Bind use cases to camera
val camera = cameraProvider.bindToLifecycle(
this as LifecycleOwner, cameraSelector, preview, presenter.useCase
)
presenter.setCamera(camera)
preview.setSurfaceProvider(presenter.textureView.surfaceProvider)
} catch (exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(context))
最后,根据设备的旋转方向设置setTargetRotation的参数。在Preview中设置setTargetRotation会影响到ImageAnalysis,从而使ImageAnalysis的图像处理更加精确,并且旋转后的图像和设备的旋转方向匹配。以下是一些示例代码:
// 竖屏模式下 preview.setTargetRotation(Surface.ROTATION_0)
// 横屏模式下 preview.setTargetRotation(Surface.ROTATION_90)
// 反向横屏模式下 preview.setTargetRotation(Surface.ROTATION_270)
// 反向纵向模式下 preview.setTargetRotation(Surface.ROTATION_180)