使用Preview预览和自定义SurfaceView或者TextureView实现CameraX预览功能

 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)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值