可能有两个原因:
1、屏幕旋转导致的,增加以下代码即可
Point screenResolutionForCamera = new Point();
screenResolutionForCamera.x = screenResolution.x;
screenResolutionForCamera.y = screenResolution.y;
//防止屏幕旋转时二维码变形
if (screenResolution.x < screenResolution.y) {
screenResolutionForCamera.x = screenResolution.y;
screenResolutionForCamera.y = screenResolution.x;
}
2、扫码界面的宽高比必须和相机预览尺寸的比例相同或者接近,不然二维码会变形
Camera.Parameters parameters = camera.getParameters();
//设置相机预览的分辨率
//扫码界面的布局的宽高的比例必须和相机预览分辨率的比例相同或者接近,不然二维码就会变形
parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
拿取相机预览的分辨率
/**
* 拿取相机预览的分辨率
*
* @param parameters 本机Camera的Parameters
* @param screenResolution 屏幕分辨率
* @return
*/
private static Point getCameraResolution(Camera.Parameters parameters,
Point screenResolution) {
//当前支持的拍照预览尺寸
String previewSizeValueString = parameters.get("preview-size-values");
if (previewSizeValueString == null) {
previewSizeValueString = parameters.get("preview-size-value");
}
Point cameraResolution = null;
//如果有本机支持的拍照预览尺寸,那么依据它和屏幕分辨率,确定相机预览的分辨率