项目需要一个二维码扫描功能
关于二维码的扫描,我之前就听说过ZXing了(虽然从来没用过)
所以既然这次要用它了,自然是得搜索一番资料咯。
在开始介绍之前,我先说一下我的使用情况吧,网上的博客里面基本上都把Zxing框架自己封装了,或者在教程中需要添加library然后修改源文件。否则你就无法自定义ZXing,并且你还会遇到某些问题——比如二维码扫描图片是横屏的。
幸运的是这些问题我都遇到了!!!
还好,我花了几个小时,终于是解决了上面这些问题,不用更改源码,也是可以对二维码扫描页面自定义的。
首先,贴上ZXing的android端GitHub地址:
好吧,接下来就开始介绍如何使用了。
一、ZXing框架的集成
在你的项目的根目录下的build.gradle中需要配置这个:
repositories {
jcenter()
}
然后是app目录下的build.gradle,配置如下:
dependencies {
compile('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false }
compile 'com.android.support:appcompat-v7:25.3.1' //如果V7已经配置过,那就不要重复添加了
compile 'com.google.zxing:core:3.3.0'
}
下面在AndroidManifest.xml中添加,表示开启硬件加速,其实没必要,因为一般硬件加速都是默认开启的
<application android:hardwareAccelerated="true" ... >
二、ZXing框架的使用
配置完成后就可以使用了。
使用的方式非常简单,在github的说明文档中,仅仅需要一行代码就可以打开二维码的扫描界面了:
new IntentIntegrator(this).initiateScan();
可以在一个Button的点击事件中添加这行代码,然后你只需要在当前的Activity中重写onActivityResult去获取结果就ok了。
不过。。。
如果你以为事情真的那么简单那你就大错特错了,下面我们看一下扫码的页面:
看完以上页面你会冒出两个问题:
1.要如何去自定义扫码界面?
2.怎么把界面竖过来?
好了,接下来就着手去准备解决这两个问题!
1、自定义扫码界面
在ZXing的github说明文档有提到过如何去自定义界面:
官方的建议是看例子,然后看源码。
下面是介绍如何去自定义扫描界面的文档地址:
之前有提到过ZXing配置好后一行代码就可以开启二维码扫描页面,在知道如何自定义界面之前我们可以了解一下这一行代码是怎么打开扫描页面的。
new IntentIntegrator(this).initiateScan();
上面的代码中,this就是当前Activity的引用,而IntentIntegrator类中的initiateScan()方法其实就是调用了startActivityForResult()方法:
public final void initiateScan() {
startActivityForResult(createScanIntent(), requestCode);
}
上面方法中的createScanIntent()返回一个从当前Activity跳转到另外一个Activity的Intent
public Intent createScanIntent() {
Intent intentScan = new Intent(activity, getCaptureActivity());
...
return intentScan;
}</