【发布时间】:2021-01-06 05:08:40
【问题描述】:
免责声明:我知道this question 的存在,但它目前尚未解决,我正在尝试提供额外的信息,而不会用无用的答案污染该信息,无论如何也无法解决问题。
我有一个自定义设备,前置摄像头默认是镜像的,所以想正常显示预览,需要水平翻转 PreviewView 的内容,但是卡住了。过去其他人建议使用PreviewView#setScaleX(-1),但它要么根本不起作用,要么需要在代码中非常特定的位置调用,我还没有找到。
下面的代码是官方CameraXBasic例子中CameraFragment.kt的简化版;我已经添加了 cmets,我已经厌倦了调用 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
}
【问题讨论】:
标签: android android-view android-camerax