private val cameraProviderFuture by lazy {
ProcessCameraProvider.getInstance(this)
} //自动管理生命周期
// 预览处理
private val preview = Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.setTargetRotation(Surface.ROTATION_270)
.build()
// 照相机处理 后摄像头
private val cameraSelector =
CameraSelector
.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
以下是textureView 实现
val cameraProvider = cameraProviderFuture.get()
mBinding.textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener {
override fun onSurfaceTextureAvailable(
surface: SurfaceTexture,
width: Int,
height: Int
) {
preview.setSurfaceProvider(ContextCompat.getMainExecutor(this@MyActivity4)) {
it.provideSurface(
Surface(surface),
ContextCompat.getMainExecutor(this@MyActivity4)
) {
}
}
}
cameraProvider.bindToLifecycle(this, cameraSelector, preview)
以下是 SurfaceView 实现
val cameraProvider = cameraProviderFuture.get()
preview.setSurfaceProvider(
ContextCompat.getMainExecutor(application)
)
//获取线程
{ request -> //创建SurfaceProvider
//设置surfaceView的surface
request.provideSurface(
mBinding.surfaceView.getHolder().getSurface(),
ContextCompat.getMainExecutor(this),
{
})
}
cameraProvider.bindToLifecycle(this, cameraSelector, preview)
请大家留意,关键代码是这句:
preview.setSurfaceProvider()
如果是使用谷歌提供的 androidx.camera.view.PreviewView 的话,那就一行代码搞定、
preview.setSurfaceProvider(mBinding.previewView.surfaceProvider)