首页 > 解决方案 > 无法使用 setLayoutParams 调整相机预览的大小

问题描述

我是 Android 新手,我正在开发一个相机应用程序。我使用表面视图来显示工作正常的相机预览。然后使用 setLayoutParams() 调整不工作的表面视图的大小。surfaceview 的大小没有改变。

我的代码有什么问题吗?

如果有任何建议或话,非常感谢。

非常感谢 !

我的代码:

//init surfaceview and surfaceholder
private void initSurHolderRear()
{
    if ( null == mSurViewRear )
    {
        mSurViewRear = new SurfaceView(this);
    }

    WindowManager.LayoutParams parms;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
    {
        parms = new WindowManager.LayoutParams(
                1, 1,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT
        );
        parms.gravity = Gravity.START | Gravity.TOP;
    }
    else
    {
        parms = new WindowManager.LayoutParams(
                1, 1,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT
        );
        parms.gravity = Gravity.START | Gravity.TOP;
    }

    ( (WindowManager) ( this.getSystemService(Context.WINDOW_SERVICE) ) ).addView(mSurViewRear, parms);
    mSurHolderRear = mSurViewRear.getHolder();
    mSurHolderRear.addCallback(this);
}


//start camera preview
private void startPreview() {

    try {
        mCamRear.setPreviewDisplay(mSurHolderRear);
        mCamRear.startPreview();

        startRearRecording(mSurHolderRear);

    } catch (Exception e) {
        e.printStackTrace();
        Log.v(LOG_TAG, "Failed to startPreview, e: " + e);
    }
}

//resize camera preview
public void resizePreview()
{
    ViewGroup.LayoutParams parms = mSurViewRear.getLayoutParams();
    parms.width = 1000;
    parms.height = 1000;

    mSurViewRear.setLayoutParams(parms);
}

标签: androidcamerasurfaceviewpreview

解决方案


推荐阅读