Camerax 如何禁用自动对焦

问题描述 投票:0回答:3

我开发了一个Android应用程序来通过camerax扫描二维码。如何在预览时禁用自动对焦?

没试过

public void initCamera(Fragment fragment, OnQRResultListener onQRResultListener) {
    mOnQRResultListener = onQRResultListener;
    PreviewConfig previewBuild = new PreviewConfig.Builder()
            .setTargetResolution(new Size(getWidth(), getHeight()))
            .setTargetAspectRatio(new Rational(1, 1))
            .setLensFacing(CameraX.LensFacing.FRONT)
            .build();
    preview = new Preview(previewBuild);
    preview.setOnPreviewOutputUpdateListener(new Preview.OnPreviewOutputUpdateListener() {
        @Override
        public void onUpdated(Preview.PreviewOutput output) {
            textureView.setSurfaceTexture(output.getSurfaceTexture());
        }
    });
    HandlerThread analyzerThread = new HandlerThread("BarcodeAnalyzer");
    analyzerThread.start();
    ImageAnalysisConfig analysisBuild = new ImageAnalysisConfig.Builder()
            .setTargetResolution(new Size(getWidth(), getHeight()))
            .setTargetAspectRatio(new Rational(1, 1))
            .setLensFacing(CameraX.LensFacing.FRONT)
            .setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
            .setCallbackHandler(new Handler(analyzerThread.getLooper()))
            .build();
    ImageAnalysis analysis = new ImageAnalysis(analysisBuild);
    analysis.setAnalyzer(new QRCodeAnalyzer(onAnalyzerResultListener));
    CameraX.bindToLifecycle(fragment, preview, analysis);
}

它慢慢扫描二维码结果

java android autofocus android-camerax
3个回答
0
投票

请参阅此链接:

https://developer.android.com/reference/androidx/camera/core/FocusMeteringAction.Builder#disableAutoCancel()

另请参阅 stackoverflow 上的这个答案:

https://stackoverflow.com/a/60095886/8401205

这是一个简单的java版本的小代码段:

FocusMeteringAction action = new FocusMeteringAction.Builder(point,                    FocusMeteringAction.FLAG_AF).disableAutoCancel().build();


0
投票

您可以使用

cancelFocusAndMetering()

val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
    cameraProviderFuture.addListener(Runnable {
        // Used to bind the lifecycle of cameras to the lifecycle owner
        val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
...
        // Bind use cases to camera
        val camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture)

        camera.cameraControl.cancelFocusAndMetering()
}

0
投票

为了取消相机的自动对焦,您需要使用Camera2CameraControl API

        val camera2CameraControl : Camera2CameraControl = Camera2CameraControl.from(canera.cameraControl)
        val captureRequestOptions = CaptureRequestOptions.Builder()
                .setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF)

        camera2CameraControl.captureRequestOptions = captureRequestOptions
© www.soinside.com 2019 - 2024. All rights reserved.