让surfaceview的尺寸比和相机的尺寸比相同
时间: 2024-02-23 16:00:19 浏览: 76
为了让SurfaceView的尺寸比和相机的尺寸比相同,我们需要在SurfaceView创建完成之后,获取到相机预览支持的尺寸列表,然后从中选择一个和SurfaceView宽高比相同的尺寸,最后将SurfaceView的尺寸设置为选择的预览尺寸。
具体实现步骤如下:
1. 在SurfaceView的回调函数surfaceCreated()中,获取到相机预览支持的尺寸列表。可以使用Camera.getParameters().getSupportedPreviewSizes()方法获取。
2. 选择一个和SurfaceView宽高比相同的尺寸。可以遍历预览尺寸列表,找到一个宽高比和SurfaceView宽高比相同的尺寸。
3. 将SurfaceView的尺寸设置为选择的预览尺寸。可以使用SurfaceView.getHolder().setFixedSize()方法设置。
下面是一个示例代码:
```java
public void surfaceCreated(SurfaceHolder holder) {
// 获取相机参数
Camera.Parameters parameters = mCamera.getParameters();
// 获取相机支持的预览尺寸列表
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
// 计算SurfaceView的宽高比
float surfaceViewRatio = (float) mSurfaceView.getWidth() / mSurfaceView.getHeight();
// 选择一个和SurfaceView宽高比相同的预览尺寸
Camera.Size previewSize = null;
float minDiff = Float.MAX_VALUE;
for (Camera.Size size : previewSizes) {
float ratio = (float) size.width / size.height;
if (Math.abs(ratio - surfaceViewRatio) < minDiff) {
previewSize = size;
minDiff = Math.abs(ratio - surfaceViewRatio);
}
}
// 设置预览尺寸
parameters.setPreviewSize(previewSize.width, previewSize.height);
mCamera.setParameters(parameters);
// 设置SurfaceView的尺寸
mSurfaceView.getHolder().setFixedSize(previewSize.width, previewSize.height);
}
```
在上面的代码中,我们通过遍历相机支持的预览尺寸列表,找到一个和SurfaceView宽高比相同的预览尺寸,然后将预览尺寸设置给相机参数,最后将SurfaceView的尺寸设置为选择的预览尺寸。
阅读全文