Android相机预览尺寸

时间:2018-03-28 11:35:22

标签: android android-camera

我有这个代码用于创建相机预览以扫描QR码但不起作用:

try {
            c = ((Class<? extends Controllo>) getIntent().getExtras().get("ctrl")).newInstance();
        } catch (Exception e) {
            Log.w("Error", e.toString());
            throw new RuntimeException(e.getMessage());
        }


        autoFocusHandler = new Handler();
        mCamera = getCameraInstance();

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        FrameLayout preview = (FrameLayout)findViewById(com.x720.qrscanner.R.id.cameraPreview);

        Camera.Parameters parameters = mCamera.getParameters();
        Boolean trovatoParam = false;
        int minValWidth = 0;
        int minValHeight = 0;
        for (Camera.Size previewSize: mCamera.getParameters().getSupportedPreviewSizes())
        {
            Log.e("SIZE", previewSize.width+" - " +previewSize.height);
            Log.e("SCHERMO", size.y+" - "+size.x);
            if(previewSize.width > minValWidth && previewSize.height > minValHeight && previewSize.width <= size.y && previewSize.height <= size.x) {
                parameters.setPreviewSize(previewSize.width, previewSize.height);
                Log.e("-------------SELEZIONO", previewSize.width+"");
                trovatoParam = true;
                minValWidth = previewSize.width;
                minValHeight = previewSize.height;
            }
        }

        if(trovatoParam == true)
            mCamera.setParameters(parameters);


        /* Instance barcode scanner */
        scanner = new ImageScanner();
        scanner.setConfig(0, Config.X_DENSITY, 3);
        scanner.setConfig(0, Config.Y_DENSITY, 3);

        scanner.setConfig(0, Config.ENABLE, 0);
        // only enable QRCODE
        scanner.setConfig(Symbol.QRCODE, Config.ENABLE, 1);

        mPreview = new CameraPreview(this, mCamera, previewCb, autoFocusCB);

        preview.addView(mPreview);

这就得到了相机:

public static Camera getCameraInstance(){
    Camera c = null;
    try {
        c = Camera.open();
    } catch (Exception e){
    }
    return c;
}

我的问题是相机预览没有填满屏幕,但我有一个很大的顶部边框。我正在使用星系s8 +。 对不起英文不好

问题图片: enter image description here

1 个答案:

答案 0 :(得分:0)

1)如果你的容器的宽度和高度与父母一样,它肯定会填满整个屏幕。 检查framelayout是否在任何其他布局内?

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

2)如果您在框架布局之外使用相对布局,请将其更改为线性布局

3)或者只是尝试使用 SurfaceView 而不是 FrameLayout

请检查并告诉我..最好的运气..