最近公司提了个需求,要求项目里面的二维码扫描功能类似微信扫一扫功能,扫到4分之3左右就能成功扫出来。既然需求来了,那就搞呗,网上查了一堆资料,也没有找到具体的解决方案。那只能自己研究了,琢磨一下,既然保持预览框不变,那我们变得只能是相机的采集区域了,于是打开zxing的源码看了一下。:
重点是两个方法
getFramingRect():这个方法是二维码预览区域,也就是那个扫描框
getFramingRectInPreview():这个方法是相机的采集区域
源码种这个两个方法大小是一样的,那么也就是说如果我改变getFramingRectInPreview这个方法的返回大小,是不就可以了呢,
public Rect getFramingRectInPreview() { if (framingRectInPreview == null) { Rect framingRect = getFramingRect(); if (framingRect == null) { return null; } // 此处为摄像头的采集区域,放大摄像头的采集区域 int width = screenResolution.x * 8 / 10; int height = screenResolution.y * 7 / 10; int leftOffset = (screenResolution.x - width) / 2; int topOffset = (screenResolution.y - height) / 3; framingRectInPreview = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height); // framingRectInPreview = rect; Log.d(TAG, "Calculated framingRectInPreview rect: " + framingRectInPreview); Log.d(TAG, "cameraResolution: " + cameraResolution); Log.d(TAG, "screenResolution: " + screenResolution); } return framingRectInPreview; }
试了下效果,果然很灵敏,甚至都不用预览框对准,只要相机对准就可以完成扫描