教你瘦身zxing(android)

来源:互联网 发布:海康网络球机安装教程 编辑:程序博客网 时间:2024/06/05 12:39

android二维码扫描是APP中常见的功能,最近闲余时间比较多,特意去研究了下,分享出来,欢迎大家一起交流。

(尊重他人的成果,参考了http://www.mobile-open.com/2015/41147.html这篇博文)

zxing项目的下载地址:https://github.com/zxing/zxing

下载来的目录如图,我们有用的就android、android-core两个目录

接下来我们把android这个目录导入到Android Studio中,因为下来的是基于Eclipse的,所以这边我是新建一个项目,然后把项目文件拷贝进去的(至于不懂得怎么拷贝的话,我是无能为力了,请自行百度),考进去后记得在build.gradle文件加上依赖库compile 'com.google.zxing:core:3.3.0',如果你的项目编译不通过,而缺少CameraConfigurationUtils类的话,在android-core里,把它复制过来放在包com.google.zxing.client.android.camera下面。

扫描页面默认是横屏的,但往往我们都是竖屏操作的,首先我们在清单文件AndroidManifest.xml把CaptureActivity改成竖屏android:screenOrientation="portrait",然后在CaptureActivity类的onResume方法中删掉如下代码:

//    if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {
//      setRequestedOrientation(getCurrentOrientation());
//    } else {
//      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
//    }

这样我们就把activity横屏调整过来了,但是相机并没有调整过来,怎么办呢?不要着急,我们在CameraConfigurationManager的setDesiredCameraParameters方法中添加代码:



到了这个步骤,显示算正常了,但是二维码扫描缓慢,一维码扫描不出来,修改CameraManager中getFramingRectInPreview方法:


//      rect.left = rect.left * cameraResolution.x / screenResolution.x;
//      rect.right = rect.right * cameraResolution.x / screenResolution.x;
//      rect.top = rect.top * cameraResolution.y / screenResolution.y;
//      rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;


        rect.left = rect.left * cameraResolution.y / screenResolution.x;
        rect.right = rect.right * cameraResolution.y / screenResolution.x;
        rect.top = rect.top * cameraResolution.x / screenResolution.y;
        rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;


最后在CameraManager中的方法buildLuminanceSource添加如下代码:



到了这里,我们的项目就可以正常扫描了,但是我们发现它的取景框是并不是正方形的,那是因为zxing取景框采用的大小是屏幕的5/8。

所以我们在CameraManager中的方法getFramingRect修改如下:


如果你不想大小限制在5/8,而是其它的话可以进入方法findDesiredDimensionInRange中修改。


至此,zxing条码扫描器已经可以正常竖屏扫描了,剩下的工作就是精简代码了。

至于精简代码,在这里我就不多阐述了,源码我放在https://github.com/linqssonny/Project上面,欢迎大家下载你。

PS:由于这个项目是我集成在一个项目里面的,使用者可以导入module(qrcode、utilslibs)就可使用,用法在MainActivity里面就有。(这个项目里面包含很多常见的工具类、模块,还不是很完善,有问题加我Q:252624617)。

0 0