【问题标题】:Camera View on SurfaceView OverlapSurfaceView 上的相机视图重叠
【发布时间】:2021-01-13 10:40:17
【问题描述】:

我正在尝试在 SurfaceView 上创建一个相机视图,它被放置在一个带有 ScrollView 的对话框中。但是在滚动完成之前,相机视图会与布局重叠。我已经尝试了一些解决方案,但仍然无法克服这个问题。我原以为只需将基本布局放在前面或将相机视图(SurfaceView)放在后面即可解决,但它仍然无法解决问题。 这是我的代码:

DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

        int width = displayMetrics.widthPixels;
        int width2 = (int) (0.82 * width);
        int width3 = (int) (0.82 * width);
        
        LinearLayout lay = uiExtTools.baselayout(context);  
        
        RelativeLayout relativeParent = new RelativeLayout(context);
        relativeParent.setLayoutParams(new RelativeLayout.LayoutParams(
                width3,
                width2));
        relativeParent.setPadding(20,20,20,5);


        SurfaceView cameraView = new SurfaceView(context);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT
        );
       
        params.addRule(RelativeLayout.CENTER_VERTICAL);
        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
        cameraView.setLayoutParams(params);
        cameraView.setPadding(20,20,20,20);

        relativeParent.addView(cameraView);

        lay.addView(relativeParent);

        BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context)
                .setBarcodeFormats(Barcode.ALL_FORMATS)
                .build();
        CameraSource cameraSource = new CameraSource.Builder(context,barcodeDetector)
                .setRequestedPreviewSize(1600,1024)
                .setAutoFocusEnabled(true)
                .build();
        cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @SuppressLint("MissingPermission")
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                try {
                    cameraSource.start(cameraView.getHolder());
                } 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();
            }
        });

在这里我附上了我的屏幕布局:

任何帮助或建议都会很棒

编辑: 在这里,我也附上了滚动完成后的屏幕布局:

【问题讨论】:

    标签: android surfaceview


    【解决方案1】:

    如果布局不总是完全可见,则不能使用 SurfaceView,因为正如参考页 (https://developer.android.com/reference/android/view/SurfaceView) 中所写的那样:“SurfaceView 在其窗口中打了一个孔以显示其表面”。

    您必须使用 TextureView (https://developer.android.com/reference/android/view/TextureView),但它可能需要进行许多更改......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多