Как я могу добавить квадратную поверхность излишне в режиме сканирования в android - PullRequest
1 голос
/ 05 августа 2020

Я использую 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);
            }
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...