注:本文使用的是Github上的工程,点击访问,如您是原作者,如有侵权,麻烦联系我删除!
效果图(摄像头扫描在代码中有,但是由于录屏原因,效果图没有录制):
原作者基本把关于二维码的操作基本都封装好了,使用起来也比较简单,本文只是轻讲解关于怎么使用,基本可以满足所有要求,推荐使用!
首先是添加依赖到as中,两个版本任选一个(建议使用最新版):
(老版本)
compile 'cn.bingoogolapple:bga-qrcodecore:1.0.7@aar'
compile 'cn.bingoogolapple:bga-zxing:1.0.7@aar'
compile 'com.android.support:design:23.3.0'
(最新版)
compile 'com.google.zxing:core:3.2.1'
compile 'cn.bingoogolapple:bga-qrcodecore:1.1.3@aar'
compile 'cn.bingoogolapple:bga-zxing:1.1.3@aar'
添加所用到的权限
//调用相机
<uses-permission android:name="android.permission.CAMERA" />
//震动(用不到震动可以去掉)
<uses-permission android:name="android.permission.VIBRATE" />
//闪光灯(如不用闪光灯可以去掉)
<uses-permission android:name="android.permission.FLASHLIGHT" />
一、摄像头读取二维码:
首先,布局文件中使用封装好的布局:
<cn.bingoogolapple.qrcode.zxing.ZXingView
android:id="@+id/zx_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:qrcv_animTime="1000"
app:qrcv_borderColor="@android:color/white"
app:qrcv_borderSize="1dp"
app:qrcv_cornerColor="@color/colorPrimaryDark"
app:qrcv_cornerLength="20dp"
app:qrcv_cornerSize="3dp"
app:qrcv_maskColor="#99000000"
app:qrcv_rectWidth="200dp"
app:qrcv_scanLineColor="@color/colorPrimaryDark"
app:qrcv_scanLineSize="1dp"
app:qrcv_topOffset="90dp" />
参数参考:
属性名 | 说明 | 默认值 |
---|---|---|
qrcv_topOffset | 扫描框距离扫描视图顶部的距离 | 90dp |
qrcv_cornerSize | 扫描框边角线的宽度 | 3dp |
qrcv_cornerLength | 扫描框边角线的长度 | 20dp |
qrcv_cornerColor | 扫描框边角线的颜色 | @android:color/white |
qrcv_rectWidth | 扫描框的宽度 | 200dp |
qrcv_maskColor | 除去扫描框,其余部分阴影颜色 | 33FFFFFF |
qrcv_scanLineSize | 扫描线的宽度 | 1dp |
qrcv_scanLineColor | 扫描线的颜色「扫描线和默认的扫描线图片的颜色」 | @android:color/white |
qrcv_scanLineHorizontalMargin | 扫描线距离左右边框的间距 | 0dp |
qrcv_isShowDefaultScanLineDrawable | 是否显示默认的图片扫描线「设置该属性后 qrcv_scanLineSize 将失效,可以通过qrcv_scanLineColor设置扫描线的颜色,避免让你公司的UI单独给你出特定颜色的扫描线图片」 | false |
qrcv_customScanLineDrawable | 扫描线的图片资源「默认的扫描线图片样式不能满足你的需求时使用,设置该属性后qrcv_isShowDefaultScanLineDrawable、qrcv_scanLineSize、qrcv_scanLineColor 将失效」 | null |
qrcv_borderSize | 扫描边框的宽度 | 1dp |
qrcv_borderColor | 扫描边框的颜色 | @android:color/white |
qrcv_animTime | 扫描线从顶部移动到底部的动画时间「单位为毫秒」 | 1000 |
然后在activity中给控件设置好识别处理监听
//设置结果处理
//mQR.setResultHandler(this);(如果使用的老版本的依赖,使用这个)
mQR.setDelegate(this);(如果使用的新版本的依赖,使用这个)
//开始读取二维码
mQR.startSpot();
然后当前类实现QRCodeView.Delegate,实现两个回调,onScanQRCodeSuccess()与onScanQRCodeOpenCameraError():
/**
* 扫描二维码成功
* @param result 识别的结果
*/
@Override
public void onScanQRCodeSuccess(String result) {
Toast.makeText(ScanActivity.this, result, Toast.LENGTH_SHORT).show();
}
/**
* 打开相机出错
*/
@Override
public void onScanQRCodeOpenCameraError() {
Toast.makeText(ScanActivity.this, "打开相机出错!请检查是否开启权限!", Toast.LENGTH_SHORT).show();
}
下面是控件方法总结:
mQR.startCamera();开启预览,但是并未开始识别
mQR.stopCamera();停止预览,并且隐藏扫描框
mQR.startSpot();开始识别二维码
mQR.stopSpot();停止识别
mQR.startSpotAndShowRect();开始识别并显示扫描框
mQR.stopSpotAndHiddenRect();停止识别并隐藏扫描框
mQR.showScanRect();显示扫描框
mQR.hiddenScanRect();隐藏扫描框
mQR.openFlashlight();开启闪光灯
mQR.closeFlashlight();关闭闪光灯
mQR.startSpotDelay(ms);延迟ms毫秒后开始识别
以上就是扫描读取二维码,比较简单,就不做过多介绍
二、生成二维码以及识别图片上的二维码
生成二维码与生成带logo的二维码都调用QRCodeEncoder.encodeQRCode()方法:
生成二维码:
/**
* 生成二维码
* 第一个参数为要生成的文本
* 第二个参数为生成尺寸
* 第三个参数为生成回调
*/
QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), new QRCodeEncoder.Delegate() {
/**
* 生成成功
* @param bitmap
*/
@Override
public void onEncodeQRCodeSuccess(Bitmap bitmap) {
ivqr.setImageBitmap(bitmap);
}
/**
* 生成失败
*/
@Override
public void onEncodeQRCodeFailure() {
Toast.makeText(GenerateActivity.this, "生成二维码失败", Toast.LENGTH_SHORT).show();
}
});
生成带logo二维码:
/**
* 生成二维码
* 第一个参数为要生成的文本
* 第二个参数为生成尺寸
* 第三个参数为生成二维码颜色
* 第四个参数为logo资源
* 第五个参数为生成回调
*/ QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), Color.parseColor("#000000"), ((BitmapDrawable)ivlogo.getDrawable()).getBitmap(), new QRCodeEncoder.Delegate() {
@Override
public void onEncodeQRCodeSuccess(Bitmap bitmap) {
ivqr.setImageBitmap(bitmap);
}
@Override
public void onEncodeQRCodeFailure() {
Toast.makeText(GenerateActivity.this, "生成带logo的二维码失败", Toast.LENGTH_SHORT).show();
}
});
解析图片上的二维码、条形码:
/**
* 解析二维码、条形码
* 第一个参数为带有二维码的图片
* 第二个参数为解析回调
*/
QRCodeDecoder.decodeQRCode(bitmap, new QRCodeDecoder.Delegate() {
/**
* 解析成功
*/
@Override
public void onDecodeQRCodeSuccess(String result) {
Toast.makeText(GenerateActivity.this, result, Toast.LENGTH_SHORT).show();
}
/**
* 解析失败
*/
@Override
public void onDecodeQRCodeFailure() {
Toast.makeText(GenerateActivity.this, "解析二维码失败!", Toast.LENGTH_SHORT).show();
}
});
好了,就介绍到这里,基本也没什么说的,本文只是说下使用方法,使用起来也比较灵活,比较简单,赞一下!
本文内容如有不懂,可以下载apk安装手机看看效果,也可以参考代码!
本文相关下载: 点击免费下载源码 点击免费下载apk软件