Android自定义相机防拉伸问题,已入坑求解救!!!

对于自定义相机,我们设置他的预览尺寸PreviewSize的时候,是要通过获取系统支持的预览尺寸getSupportedPreViewSize获得的。但是getSupportedPreViewSize集合,遍历每个尺寸的时候,都会发现他的宽度大于高度的,为了防止预览图像拉伸,我们是不是应该预览界面SurfaceView的宽度大于高度。但是又不科学,比如相机旋转90度,刚刚使我们正拿着手机的角度,此时高大于宽,但是系统相机全屏都是好好的,完全没有拉伸的。这到底是个什么情况,求解答!!!求脱坑!!!

具体函数不熟,不妨大胆推测一下。
假定你的目标是全屏方式预览。
getSupportedPreViewSize 给的是横屏尺寸,而现在手持状态是竖屏;那么你要把尺寸高、宽交换,图片旋转90度显示。

默认的本来就是横屏的呀,你开启camera的时候,有个mCamera.setDisplayOrientation,通过这个来设置就行了,你的surfaceView不用变的。
附上自己的camera开启参数。

     mCamera = Camera.open(mCamId);

        Camera.Parameters params = mCamera.getParameters();
        Camera.Size size = mCamera.new Size(mPreviewWidth, mPreviewHeight);
        if (!params.getSupportedPreviewSizes().contains(size) || !params.getSupportedPictureSizes().contains(size)) {
            Toast.makeText(getContext(), String.format("Unsupported resolution %dx%d", size.width, size.height), Toast.LENGTH_SHORT).show();
            stopCamera();
            return false;
        }

        if (params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
            params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        }

        /***** set parameters *****/
        params.setPictureSize(mPreviewWidth, mPreviewHeight);
        params.setPreviewSize(mPreviewWidth, mPreviewHeight);
        int[] range = findClosestFpsRange(SrsEncoder.VFPS, params.getSupportedPreviewFpsRange());
        params.setPreviewFpsRange(range[0], range[1]);
        params.setPreviewFormat(ImageFormat.NV21);
        params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
        params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
        if (!params.getSupportedFocusModes().isEmpty()) {
            params.setFocusMode(params.getSupportedFocusModes().get(0));
        }
        mCamera.setParameters(params);

        mCamera.setDisplayOrientation(mPreviewRotation);

        try {
            mCamera.setPreviewTexture(surfaceTexture);
            mCamera.setPreviewCallback(this);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mCamera.startPreview();