CameraX预览,自定义相机页面

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


添加依赖库

```

// CameraX

def camerax_version ="1.0.0"

implementation"androidx.camera:camera-core:${camerax_version}"

implementation"androidx.camera:camera-camera2:${camerax_version}"

implementation"androidx.camera:camera-lifecycle:${camerax_version}"

implementation"androidx.camera:camera-view:1.0.0-alpha24"

```


1、使用Preview预览,布局如下

```

<androidx.camera.view.PreviewView

    android:id="@+id/camera_preview"

    android:layout_width="match_parent"

    android:layout_height="match_parent" />

```


代码设置,生命周期都自动管理

```

val cameraProviderFuture =ProcessCameraProvider.getInstance(this)

cameraProviderFuture.addListener({

    val cameraProvider =cameraProviderFuture.get()

   val preview =Preview.Builder().build()//创建preview

  // 设置镜头

  cameraType = CameraSelector.LENS_FACING_BACK//后置摄像头

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

    try {

        //先解绑

        cameraProvider.unbindAll()

        //cameraPreview是布局的PreviewView,获取它的surfaceProvider

        preview.setSurfaceProvider(bind.cameraPreview.surfaceProvider)

        cameraProvider.bindToLifecycle(this, cameraSelector, preview)//绑定

    }catch (e:Exception) {

}

},ContextCompat.getMainExecutor(this))

```

预览就完成,是不是很简单。




下面看使用SurfaceView如何实现

布局:

" `````````````````````` 

<SurfaceView

    android:id="@+id/surface_view"

    android:layout_width="match_parent"

    android:layout_height="match_parent"/>

`````````````````````````"


代码此处        preview.setSurfaceProvider(bind.cameraPreview.surfaceProvider),

修改如下即可

" `````````````````````` 

preview.setSurfaceProvider(ContextCompat.getMainExecutor(application), //获取线程 object:Preview.SurfaceProvider{//创建SurfaceProvider

override fun onSurfaceRequested(request:SurfaceRequest) {

//设置surfaceView的surface

   request.provideSurface(surfaceView.getHolder().getSurface(), mainExecutor, object :Consumer{

    override fun accept(t:SurfaceRequest.Result) {//回调

    Log.e("TAG","t : " + t.toString())

}} )}})

`````````````````````````"

这样就完成了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容