之前在github上找了一个对zxing简化过的二维码扫描库,运行它的demo的时候挺好,放到我自己的工程里面就各种不对劲,比如说扫描效率很差、角度刁钻等。当时也没多想,换了另外一个zbar库还是这样!!!好吧,问题出在我自己的代码里面。

花点儿时间看了源码,原来问题是这样出现的:

Demo里的扫描界面

demo里的扫描界面是如下图这样的,有系统的状态栏,然后中间是一个方形的扫描区域。

demo scan view

我工程里的扫描界面

我把库拿来用的时候,对扫描界面进行了改动,加上了标题栏,而且使用的是Linearlayout

my scan view

致使扫描框往下了一点,移动的高度也就是标题栏的高度。我就猜会不会是这个问题,找到源码来看一看

code in zbar when init crop rect

果然!计算截图区域的时候,左上角顶点的Y坐标是int y = cropTop * cameraHeight / containerHeight;再看一下里面用到的cropTop是什么,是int cropTop = location[1] - getStatusBarHeight(),是减去了状态栏高度之后的位置。

所以,我的布局里面还有一个标题栏,造成了截取区域有误差,类似下图,扫描效率就很差了。

actually crop rect

截取的二维码不全,所以给人感觉二维码扫描效率不高。。。😭