如何在CameraX中使用Camera2Config.Extender

时间:2019-07-19 10:07:43

标签: android android-camerax

找不到将 Camera2Config Camera2Config.Extender 设置为 CameraX 的任何示例。

您能否提供一个示例,将这些对象设置为 CameraX ,以便例如获取回调方法调用。

基本上我想以 androidx.camera.camera2.impl.Camera.State 的格式获取Camera的状态。

1 个答案:

答案 0 :(得分:4)

我最近也需要这个,在撰写本文时,这是对我有效的方式。 请注意,由于CameraX处于Alpha状态,这种方法可能会停止工作。

基本上,您需要使用Config.ExtendableBuilder并将其传递给Camera2Config.Extender的构造函数,然后再在其上调用build()并创建UseCase。 >

例如,我从CameraX sample那里获取了代码,并将其调整为使用Camera2Config.Extender

// Set up the view finder use case to display camera preview
val viewFinderConfigBuilder = PreviewConfig.Builder().apply {
    setLensFacing(lensFacing)
    // We request aspect ratio but no resolution to let CameraX optimize our use cases
    setTargetAspectRatio(screenAspectRatio)
    // Set initial target rotation, we will have to call this again if rotation changes
    // during the lifecycle of this use case
    setTargetRotation(viewFinder.display.rotation)
}

// Create the extender and pass in the config builder we want to extend
val previewExtender = Camera2Config.Extender(viewFinderConfigBuilder)
// Listen to camera state changes
previewExtender.setDeviceStateCallback(object : CameraDevice.StateCallback() {
    // implementation omitted for sake of simplicity
})

// Build your config as usual and create your wanted UseCase with it
val viewFinderConfig = viewFinderConfigBuilder.build()

// Use the auto-fit preview builder to automatically handle size and orientation changes
preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder)

我也建议不要使用任何实现细节,而应像上面的示例一样使用CameraDevice.StateCallback