Я использую API play-services-vision и BarcodeDetector для сканирования QR-кода. В файле XML я использую SurfaceView для отображения экрана камеры. Я хочу создать поверхность чрезмерно квадратной формы на экране сканирования и разрешить сканирование только в пределах квадрата. Пожалуйста, помогите мне немедленно.
private void initialiseDetectorsAndSources() {
barcodeDetector = new BarcodeDetector.Builder(CarryParkApplication.getCurrentContext())
.setBarcodeFormats(Barcode.QR_CODE)
.build();
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
cameraSource = new CameraSource.Builder(CarryParkApplication.getCurrentContext(), barcodeDetector)
.setRequestedPreviewSize(width, height)
.setAutoFocusEnabled(true) //you should add this feature
.build();
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
if (ActivityCompat.checkSelfPermission(CarryParkApplication.getCurrentContext(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
cameraSource.start(surfaceView.getHolder());
} else {
ActivityCompat.requestPermissions(CarryParkApplication.getCurrentActivity(), new
String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cameraSource.stop();
}
});
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barcodes = detections.getDetectedItems();
if (barcodes.size() != 0) { moveToInitialPaymentFragment(barcodes.valueAt(0).displayValue);
}
}
});
}