zxing扫码--镭射线
2015-09-15 小文字
前言
在很多应用中都有二维码扫描的需求,比如微信,通过扫描电脑二维码,实现用户登录授权;
Google出品的zxing时比较出名的二维码扫描库,但是和其他开源组件不同,zxing包含了很多东西,同时github上的官方实例也较为复杂,如果初次接触,要很快集成扫码并自定UI并不容易;
本文通过分析zxing官方app,揭开扫码镭射线的实现方案;
https://github.com/zxing/zxing
镭射线
如下图,这是zxing实例的默认效果
但是在很多情况下需要根据项目需求自定义,如类似微信的扫描框及扫描线
源码分析
通过分析zxing项目可以知道扫描框对应的时一个自定义的view:ViewfinderView,但就这个类来说,代码量200左右
主要的绘制逻辑都在onDraw()内,这里面包含了扫描框的绘制,识别点的绘制,以及镭射线的绘制,现在我们只需关注其中的镭射线和扫描框部分逻辑
- 首先确定扫描框的位置,计算大小等
- 接下来绘制扫描线
- 让扫描线显示并动起来
这里通过局部刷新的方式,每80毫秒重绘一次镭射线;
小结
实际上通过上面的三段代码,我们就已经实现了扫码的一部分即贮备扫描框和镭射线,后续会通过其他文章继续优化我们的扫描框和摄像头的使用;
项目位于:https://github.com/avenwu/zxing-support
本文所对应的代码位于tag-v1:https://github.com/avenwu/zxing-support/releases/tag/tag-v1