Android camera2+surfaceview预览画面拉长

如题
用camera2+surfaceview预览画面拉长,怎么破。。。。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/820
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Android Camera SurfaceView
  • 除此之外, 这篇博客: Android自定义camera相机 系列(一)中的 2.3.1 通过 SurfaceView 获取需要数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    	// 部分对象的声明
    	private Camera mCamera;
        private SurfaceHolder mHolder;
    
    	mHolder = svContent.getHolder();
        mHolder.addCallback(this);
    
    	// SurfaceHolder 的监听事件
    	@Override
        public void surfaceCreated(SurfaceHolder holder) {
        	// 相机预览
            startPreview(mCamera, holder);
        }
    
    	// 画布改变 调用 相机预览
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            mCamera.stopPreview();
            startPreview(mCamera, holder);
        }
    
    	// 画布销毁  回收相机
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            releaseCamera();
        }
    
    
    	 /**
         * 预览相机
         */
        private void startPreview(Camera camera, SurfaceHolder holder) {
            try {
            	// 确认相机预览尺寸
                setupCamera(camera);
                camera.setPreviewDisplay(holder);
                cameraInstance.setCameraDisplayOrientation(this, mCameraId, camera);
                camera.startPreview();
                isView = true;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    	/**
         * 设置surfaceView的尺寸 因为camera默认是横屏,所以取得支持尺寸也都是横屏的尺寸
         * 我们在startPreview方法里面把它矫正了过来,但是这里我们设置设置surfaceView的尺寸的时候要注意 previewSize.height<previewSize.width
         * previewSize.width才是surfaceView的高度
         * 一般相机都是屏幕的宽度 这里设置为屏幕宽度 高度自适应 你也可以设置自己想要的大小
         */
        private void setupCamera(Camera camera) {
            Camera.Parameters parameters = camera.getParameters();
            if (parameters.getSupportedFocusModes().contains(
                    Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
                parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
            }
            //根据屏幕尺寸获取最佳 大小
            Camera.Size previewSize = cameraInstance.getPicPreviewSize(parameters.getSupportedPreviewSizes(),
                    screenHeight, screenWidth);
            parameters.setPreviewSize(previewSize.width, previewSize.height);
    
            Camera.Size pictrueSize = cameraInstance.getPicPreviewSize(parameters.getSupportedPictureSizes(),
                    screenHeight,screenWidth);
            parameters.setPictureSize(pictrueSize.width, pictrueSize.height);
            camera.setParameters(parameters);
    		// picHeight = (screenWidth * pictrueSize.width) / pictrueSize.height;
            picWidth = pictrueSize.width;
            picHeight = pictrueSize.height;
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(screenWidth,
                    (screenWidth * pictrueSize.width) / pictrueSize.height);
            svContent.setLayoutParams(params);
        }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^