Jetpack Compose 的 CameraX 触摸对焦问题

问题描述 投票:0回答:1
AndroidView(modifier = Modifier.fillMaxSize(),factory = {
            PreviewView(it).apply {
                this.controller = controller
                controller.bindToLifecycle(lifecycleOwner)
                implementationMode = PreviewView.ImplementationMode.COMPATIBLE
                setOnTouchListener { _, event ->
                    val focusX = event.x // Map coordinates to focus points
                    val focusY = event.y
                    controller.isTapToFocusEnabled(focusX,focusY) // Assuming focus control API is available
                    true // Consume touch event
                }
            }
        })

错误

Too many arguments for public open fun isTapToFocusEnabled(): Boolean defined in androidx.camera.view.LifecycleCameraController

相机可以工作,但我想添加触摸对焦,但我遇到了一个问题,我找不到解决方案,而且我在使用 Jetpack Compose 查找资源时遇到问题。我删除了 focusX、focusY 并运行了它。我的设备(Redmi Note 11 Pro、Android11)

android android-jetpack-compose android-camera android-camera2 android-camerax
1个回答
0
投票

根据

CameraController.isTapToFocusEnabled()
的文档,它不接受任何参数,只是返回是否启用了点击聚焦功能,即它不用于显式触发您似乎正在考虑的点击聚焦功能。

https://developer.android.com/reference/androidx/camera/view/CameraController#isTapToFocusEnabled()

因此,

controller.isTapToFocusEnabled(focusX,focusY)
会导致错误,而
controller.isTapToFocusEnabled()
应该可以正常工作。

文档还提到它应该默认启用(您可以使用

CameraController.setTapToFocusEnabled(boolean)
API 禁用/重新启用它)。因此,该功能已默认启用,您无需执行任何进一步操作即可确保根据点击事件进行对焦。

如果您想知道点击是否已应用或成功,您可以观察 CameraController#getTapToFocusState() API 返回的 LiveData。正如该文档所解释的,它会告诉您点击对焦是否已开始、完成或失败。您具体如何使用该信息将取决于您的具体要求。例如,您可以简单地通过 Toast 消息通知用户,或者在点击事件的位置进行一些 UI 更改。

© www.soinside.com 2019 - 2024. All rights reserved.