android二维码扫描、读取、识别、生成、带logo
注:本文使用的是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.ZXingViewandroid: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 识别的结果*/@Overridepublic void onScanQRCodeSuccess(String result) {Toast.makeText(ScanActivity.this, result, Toast.LENGTH_SHORT).show();}/*** 打开相机出错*/@Overridepublic 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*/@Overridepublic void onEncodeQRCodeSuccess(Bitmap bitmap) {ivqr.setImageBitmap(bitmap);}/*** 生成失败*/@Overridepublic 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() {@Overridepublic void onEncodeQRCodeSuccess(Bitmap bitmap) {ivqr.setImageBitmap(bitmap);}@Overridepublic void onEncodeQRCodeFailure() {Toast.makeText(GenerateActivity.this, "生成带logo的二维码失败", Toast.LENGTH_SHORT).show();}});
解析图片上的二维码、条形码:
/*** 解析二维码、条形码* 第一个参数为带有二维码的图片* 第二个参数为解析回调*/
QRCodeDecoder.decodeQRCode(bitmap, new QRCodeDecoder.Delegate() {/*** 解析成功*/ @Overridepublic void onDecodeQRCodeSuccess(String result) {Toast.makeText(GenerateActivity.this, result, Toast.LENGTH_SHORT).show();}/*** 解析失败*/ @Overridepublic void onDecodeQRCodeFailure() {Toast.makeText(GenerateActivity.this, "解析二维码失败!", Toast.LENGTH_SHORT).show();}});
好了,就介绍到这里,基本也没什么说的,本文只是说下使用方法,使用起来也比较灵活,比较简单,赞一下!
本文内容如有不懂,可以下载apk安装手机看看效果,也可以参考代码!
本文相关下载: 点击免费下载源码 点击免费下载apk软件
android二维码扫描、读取、识别、生成、带logo相关推荐
- TP5使用二维码PHP QR Code生成带LOGO和不带LOGO的二维码
TP5使用二维码PHP QR Code生成带LOGO和不带LOGO的二维码 1.下载二维码插件Phpqrcode,地址 https://sourceforge.net/projects/phpqrco ...
- Android 二维码扫描(仿微信界面),根据Google zxing
Android 二维码扫描(仿微信界面),根据Google zxing Android项目开发中经常会用到二维码扫描,例如登陆.支付等谷歌方面已经有了一个开源库(地址: https://github. ...
- Python 二维码的读取与生成:使用链接生成二维码、读取二维码里的链接
Python 二维码的读取与生成演示 ① 使用链接生成二维码 ② 读取二维码里的链接 [ 文章推荐 ] Python 绘制中国地图:使用 pyecharts 最新版本绘制中国地图实例详解,个性化地图定 ...
- Android二维码扫描开发(一):实现思路与原理
2019独角兽企业重金招聘Python工程师标准>>> Android二维码扫描开发(一):实现思路与原理 Android二维码扫描开发(二):YUV图像格式详解 Android二维 ...
- Android二维码扫描之ZXing快速项目集成
<Android二维码扫描之ZXing快速项目集成> 二维码扫描现在是一直比较多的应用场景,Android的开源项目ZXing提供了完整.成熟的解决方案,如果仅仅是出于快速开发的目的,可以 ...
- Android 二维码扫描源码下载
Android 二维码扫描是很常用的工具,是不是很Cool,到底如何实现的呢,下面我们就来探讨一下Zxing的实现方法(底部附上下载链接): 首先 工程结构: 如何引用:(内容来自雪炭网SnowCoa ...
- Android二维码扫描:基于barcodescanner
Android二维码扫描:基于barcodescanner 二维码扫描现在成为一种非常常见的APP基础功能,附录1是我曾经用过的二维码/条形码扫描开源项目,但是附录1的项目集成和二次定制比较繁琐 ...
- 二维码扫描器 android二维码扫描 二维码识别软件
这两天,在弄一个二维码扫描的东西. 二维码为移动设备购物提供了方便.在电商行业也有一些商家开始正式商业应用,我所知道的 1号店就在使用这种东西. 一个二维码对应一个产品. 二维码可以使用Google提 ...
- Android二维码扫描
本文详细说明怎么在Android端实现二维码扫描,只是讲述如何利用Google zxing进行二维码扫描,不涉及代码的深入研究,结果文章最后附有demo,demo可直接使用,觉得文章累赘可以直接拷de ...
- 解决Android二维码扫描ZXing竖屏拉伸变长闪退扫描区域小等问题
Android 基于google Zxing实现二维码.条形码扫描,仿微信二维码扫描效果 这篇文章写的不错,但是按照这篇文章使用二维码的话会出现竖屏扫描图像拉伸变长的问题(有一个地方计算错误),解决拉 ...
最新文章
- Linux 基金会宣布红队项目,致力于孵化开源安全工具
- 如何使用消息队列解决分布式事物?
- 只有这种AI芯片才能拯救人工智能?
- python安装numpy-python安装numpy和pandas的方法步骤
- 电子产品设计流程_消费类电子产品设计思维模式是什么?
- PKCS#11 in OP-TEE
- Vue中组态实现方案-BaseMap的使用
- 【BJDCTF 2nd—Web】做题+复现记录
- python 之 __new__ 方法理解
- esp8266 rtos 开发环境 ubuntu_esp8266/32~资源帖[持续更新]
- flex 布局,flex-grow 宽度未等比放大问题解决办法
- VMware 12安装Mac OS X 10.11解决上网的问题
- IT战略规划与企业架构
- 国猪555555555
- 外卖小程序对接飞鹅小票打印的实现
- PDF转word的两种办法
- 第八课: FTP Server设置与加载
- 了解HTML标记语言
- 【Java】StudentsInfoQuery(简单的学生信息查询系统)
- (滁院20级计科专用)期末考试复习-计组