项目中用ZXing做的二维码扫描,在部分5.0和6.0的手机上扫描变形了,网上找了老半天终于是修改成功了,记录下解决办法。修改CameraConfigurationManager.Java下的findBestPreviewSizeValue()方法中的一句代码:
<span style="color:#555555;"> private static Point findBestPreviewSizeValue(CharSequence previewSizeValueString, Point screenResolution) { int bestX = 0; int bestY = 0; // int diff = Integer.MAX_VALUE; float diff=Integer.MAX_VALUE; //将之前的int 型数据改成float数据 for (String previewSize : COMMA_PATTERN.split(previewSizeValueString)) { previewSize = previewSize.trim(); int dimPosition = previewSize.indexOf('x'); if (dimPosition < 0) { Log.w(TAG, "Bad preview-size: " + previewSize); continue; } int newX; int newY; try { newX = Integer.parseInt(previewSize.substring(0, dimPosition)); newY = Integer.parseInt(previewSize.substring(dimPosition + 1)); } catch (NumberFormatException nfe) { Log.w(TAG, "Bad preview-size: " + previewSize); continue; } //int newDiff = Math.abs(newX - screenResolution.x) + Math.abs(newY - screenResolution.y); float newDiff = Math.abs(screenResolution.x * 1.0f / newY - screenResolution.y * 1.0f / newX);
if (newDiff == 0) { bestX = newX; bestY = newY; break; } else if (newDiff < diff) { bestX = newX; bestY = newY; diff = newDiff; } }</span>//将之前的int 型数据改成float数据