免责声明:我知道存在这个问题,但它目前没有得到解决,我试图提供额外的信息,而不是用无用的答案污染那个问题。
我有一个默认镜像的前置相机的自定义设备,所以我想正常显示预览,并且需要水平翻转PreviewView的内容,但我卡住了。过去其他人曾经建议使用PreviewView#setScaleX(-1)
,但它要么根本不起作用,要么需要在代码中的非常特定的位置调用,但我还没有找到这个位置。
下面的代码是官方CameraXBasic示例中的CameraFragment.kt
的简化版本;我已经尝试过在旁边加上注释viewFinder.scaleX = -1f
,但没有成功。老实说,我真的不认为位置有什么区别,因为如果我使用除1之外的任何值调用它,都可以使用scaleX
和scaleY
正常工作,但它总是忽略负号,所以它从不翻转。
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
}