android 如何从Jetpack中的PreviewView访问CameraControl

gfttwv5a  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(199)

我有下面的AndroidView显示从背面相机的看法.“工厂”例程运行一次就可以了。当缩放值更改但相机视图不反映更新的缩放时,将调用“update”。

val zoom: MutableState<Float> = remember { mutableStateOf(2f) }

   . . . 

   AndroidView(

        factory = {context ->
            val previewView = PreviewView(context)

            val preview = Preview.Builder().build()

            val selector = CameraSelector.Builder()
                .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                .build()

            preview.setSurfaceProvider(previewView.surfaceProvider)

            val cam = cameraProviderFuture.get().bindToLifecycle(
                lifecycleOwner,
                selector,
                preview,
            )

            cam.cameraControl.setZoomRatio(zoom)
            println("factory view " + previewView)

            previewView
        },

        update = { view ->
            print("preview view " +view)
            view.controller?.cameraControl?.setZoomRatio(zoom)
            println("updated zoom " + zoom)
        },
        modifier = modifier
    )

访问相机控件以设置变焦的正确方法是什么?

enyaitl3

enyaitl31#

将缩放级别存储为状态,然后当状态值更改时,您将获得重新合成。
从您的代码中,不可能看到您最初从哪里获得缩放级别,或者您如何收听它的变化。

var zoom by remember { mutableStateOf(initialZoomLevel) }

AndroidView(
    ...
)

您将需要某种侦听器,以便在用户更改缩放值时更新缩放值。

相关问题