gpt4 book ai didi

android - 如何在 CameraX 上切换到前置摄像头?

转载 作者:搜寻专家 更新时间:2023-11-01 09:20:32 26 4
gpt4 key购买 nike

我已按照步骤 here to get CameraX setup 进行操作,现在我正在尝试让前置摄像头按钮正常工作。

这是我的设置代码:

private lateinit var preview: Preview

private fun startCamera() {

// Create configuration object for the viewfinder use case
val previewConfig = PreviewConfig.Builder().apply {
setLensFacing(CameraX.LensFacing.BACK)
}.build()

// Build the viewfinder use case
preview = Preview(previewConfig)

// Every time the viewfinder is updated, recompute layout
preview.setOnPreviewOutputUpdateListener {

// To update the SurfaceTexture, we have to remove it and re-add it
val parent = viewFinder.parent as ViewGroup
parent.removeView(viewFinder)
parent.addView(viewFinder, 0)

viewFinder.surfaceTexture = it.surfaceTexture
updateTransform()
}

// Bind use cases to lifecycle
CameraX.bindToLifecycle(this, preview)
}

当用户单击“切换”按钮时,我会重新配置预览以使用前置摄像头,然后重新初始化预览。

private fun initSwitchButton(view: View) {
switchButton = view.findViewById(R.id.switch_button)
switchButton.setOnClickListener {
val previewConfig = PreviewConfig.Builder().apply { setLensFacing(CameraX.LensFacing.FRONT) }.build()
preview = Preview(previewConfig)
}
}

但是,这不会切换到前置摄像头。我错过了什么?

最佳答案

自 2021 年以来,CameraX 的更新导致 CameraX.LensFacing 无法使用。请改用 CameraSelector

    private CameraSelector lensFacing = CameraSelector.DEFAULT_FRONT_CAMERA;

private void flipCamera() {
if (lensFacing == CameraSelector.DEFAULT_FRONT_CAMERA) lensFacing = CameraSelector.DEFAULT_BACK_CAMERA;
else if (lensFacing == CameraSelector.DEFAULT_BACK_CAMERA) lensFacing = CameraSelector.DEFAULT_FRONT_CAMERA;
startCamera();
}

private void startCamera() {
ListenableFuture<ProcessCameraProvider> cameraFuture = ProcessCameraProvider.getInstance(requireContext());

cameraFuture.addListener(() -> {
imageCapture = new ImageCapture.Builder()
.setTargetRotation(cameraPreview.getDisplay().getRotation())
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build();
videoCapture = new VideoCapture.Builder().build();

try {
ProcessCameraProvider processCameraProvider = cameraFuture.get();
Preview preview = new Preview.Builder().build();
preview.setSurfaceProvider(cameraPreview.getSurfaceProvider());
processCameraProvider.unbindAll();

// lensFacing is used here
processCameraProvider.bindToLifecycle(getViewLifecycleOwner(), lensFacing, imageCapture, videoCapture, preview);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}, ContextCompat.getMainExecutor(requireContext()));
}

关于android - 如何在 CameraX 上切换到前置摄像头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56177668/

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