使用
Camera2Interop.Extender
访问低级别的camera2 API,可以在CameraX中使用手动对焦。您需要像这样为预览构建器设置两个额外选项:
void setFocusDistance(ExtendableBuilder<?> builder, float distance) {
Camera2Interop.Extender extender = new Camera2Interop.Extender(builder);
extender.setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF);
extender.setCaptureRequestOption(CaptureRequest.LENS_FOCUS_DISTANCE, distance);
}
在构建CameraX预览请求时使用它:
float focusDistance = 0F
Preview.Builder previewBuilder = new Preview.Builder()
setFocusDistance(previewBuilder, focusDistance)
preview = previewBuilder.build()
preview.setSurfaceProvider(viewFinder.getSurfaceProvider())
请注意,您也可以以此方式设置其他camera2 CaptureRequest选项。
以下是如何查找LENS_INFO_MINIMUM_FOCUS_DISTANCE(通常为约10f)的方法:
theCamera = cameraProvider.bindToLifecycle(...
CameraCharacteristics camChars = Camera2CameraInfo
.extractCameraCharacteristics(theCamera.getCameraInfo())
float discoveredMinFocusDistance = camChars
.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE)
Log.i("dev", "found it! " + discoveredMinFocusDistance)