gpt4 book ai didi

android - 如何在 CameraX 中镜像 PreviewView?

转载 作者:行者123 更新时间:2023-12-04 23:55:01 60 4
gpt4 key购买 nike

免责声明:我知道 this question 的存在,但它目前仍未解决,我正在尝试提供额外的信息,而不是用无论如何都无法解决问题的无用答案污染那个信息。

我有一个带有默认镜像的前置摄像头的自定义设备,所以我想正常显示预览,我需要水平翻转 PreviewView 的内容,但我卡住了。过去其他人建议使用 PreviewView#setScaleX(-1) 但它要么根本不起作用,要么需要在代码中非常特定的点调用它,我没有这样做还没找到。

下面的代码是官方CameraXBasicCameraFragment.kt的简化版例子;我在调用 viewFinder.scaleX = -1f 但没有成功的地方添加了注释。老实说,我真的不认为这个地方有什么不同,因为如果我用 1 以外的任何值调用它,它在 scaleXscaleY 上都能正常工作,但是 它总是忽略负号所以它永远不会翻转。

private lateinit var viewFinder: PreviewView

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
...
viewFinder = view.findViewById(R.id.view_finder)
// HERE
viewFinder.post {
// HERE
setupCamera()
}
}

private fun setupCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()

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

val preview = Preview.Builder()
.build()
.also {
// HERE
it.setSurfaceProvider(viewFinder.surfaceProvider)
}

cameraProvider.unbindAll()

try {
cameraProvider.bindToLifecycle(this, cameraSelector, preview)
// HERE
} catch (exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
// HERE
}, ContextCompat.getMainExecutor(requireContext()))
// HERE
}

最佳答案

根据实现类型(COMPATIBLE vs PERFORMANCE)和设备,PreviewView 可以使用 TextureViewSurfaceView,在您的情况下,我假设 PreviewView 使用的是 SurfaceView,您可以通过访问 来确认这一点PreviewView 的第一个 subview (View.getChildAt(0))。

TextureView 就像任何其他 View,这就是为什么当 PreviewView 使用它时,将其 scaleX 设置为 -1 应该反射(reflect)显示预习。创建布局后,您可以调用 PreviewView.setScaleX(-1F)(例如,在 onViewCreated() 中)。

SurfaceView 有点棘手,因为 SurfaceView 在某些方面独立 : Surface 放置在包含 View 的窗口后面,View 层次结构通过在窗口中打洞来正确处理整个布局以显示 >SurfaceViewSurface。这也许可以解释为什么镜像 SurfaceView 显示的内容是不可能的,尽管我不确定为什么放大(scaleX 设置为值 > 1)和缩小(scaleX 设置为 0 到 1 之间的值)尽管如此。

关于android - 如何在 CameraX 中镜像 PreviewView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65577507/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com