QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
目录
功能介绍
根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到有生成二维码、扫描二维码、识别图片二维码等需求的猿友。修改幅度较大,也就没准备针对 barcodescanner 库提交PR。
- ZXing 生成可自定义颜色、带 logo 的二维码
- ZXing 扫描二维码
- ZXing 识别图库中的二维码图片
- 可以设置用前置摄像头扫描
- 可以控制闪光灯,方便夜间使用
- 可以定制各式各样的扫描框
- 可定制全屏扫描或只识别扫描框区域内的二维码
- ZBar 扫描二维码「扫描中文会有乱码,如果对中文有要求,请使用 ZXing」
常见问题
1.部分手机无法扫描出结果,扫描预览界面二维码被压缩
使用的时候将 Toolbar 或者其他 View 盖在 ZBarView 或者 ZXingView 的上面,让 ZBarView 或者 ZXingView 填充屏幕宽高。ZXing 布局文件参考 ZBar 布局文件参考
2.Gradle 依赖时提示找不到cn.bingoogolapple:bga-libraryname:「latestVersion」@aar
「latestVersion」指的是左边这个 maven-central 徽章后面的「数字」,请自行替换。请不要再来问我「latestVersion」是什么了
效果图与示例 apk

| 点击下载 ZXingDemo.apk或扫描下面的二维码安装 | 点击下载 ZBarDemo.apk或扫描下面的二维码安装 |
|---|---|
Gradle 依赖
「latestVersion」指的是左边这个 maven-central 徽章后面的「数字」,请自行替换。
ZXing
dependencies {
compile 'com.google.zxing:core:3.2.1'
compile 'cn.bingoogolapple:bga-qrcodecore:latestVersion@aar'
compile 'cn.bingoogolapple:bga-zxing:latestVersion@aar'
}
ZBar
dependencies {
compile 'cn.bingoogolapple:bga-qrcodecore:latestVersion@aar'
compile 'cn.bingoogolapple:bga-zbar:latestVersion@aar'
}
布局文件
ZXing
<cn.bingoogolapple.qrcode.zxing.ZXingView
android:id="@+id/zxingview"
style="@style/MatchMatch"
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="#33FFFFFF"
app:qrcv_rectWidth="200dp"
app:qrcv_scanLineColor="@color/colorPrimaryDark"
app:qrcv_scanLineSize="1dp"
app:qrcv_topOffset="90dp" />
ZBar
<cn.bingoogolapple.qrcode.zbar.ZBarView
android:id="@+id/zbarview"
style="@style/MatchMatch"
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_isShowDefaultScanLineDrawable="true"
app:qrcv_maskColor="#33FFFFFF"
app:qrcv_rectWidth="200dp"
app:qrcv_scanLineColor="@color/colorPrimaryDark"
app:qrcv_topOffset="90dp" />
自定义属性说明
| 属性名 | 说明 | 默认值 |
|---|---|---|
| qrcv_topOffset | 扫描框距离 toolbar 底部的距离 | 90dp |
| qrcv_cornerSize | 扫描框边角线的宽度 | 3dp |
| qrcv_cornerLength | 扫描框边角线的长度 | 20dp |
| qrcv_cornerColor | 扫描框边角线的颜色 | @android:color/white |
| qrcv_rectWidth | 扫描框的宽度 | 200dp |
| qrcv_barcodeRectHeight | 条码扫样式描框的高度 | 140dp |
| qrcv_maskColor | 除去扫描框,其余部分阴影颜色 | #33FFFFFF |
| qrcv_scanLineSize | 扫描线的宽度 | 1dp |
| qrcv_scanLineColor | 扫描线的颜色「扫描线和默认的扫描线图片的颜色」 | @android:color/white |
| qrcv_scanLineMargin | 扫描线距离上下或者左右边框的间距 | 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 |
| qrcv_isCenterVertical | 扫描框是否垂直居中,该属性为true时会忽略 qrcv_topOffset 属性 | false |
| qrcv_toolbarHeight | Toolbar 的高度,通过该属性来修正由 Toolbar 导致扫描框在垂直方向上的偏差 | 0dp |
| qrcv_isBarcode | 是否是扫条形码 | false |
| qrcv_tipText | 提示文案 | null |
| qrcv_tipTextSize | 提示文案字体大小 | 14sp |
| qrcv_tipTextColor | 提示文案颜色 | @android:color/white |
| qrcv_isTipTextBelowRect | 提示文案是否在扫描框的底部 | false |
| qrcv_tipTextMargin | 提示文案与扫描框之间的间距 | 20dp |
| qrcv_isShowTipTextAsSingleLine | 是否把提示文案作为单行显示 | false |
| qrcv_isShowTipBackground | 是否显示提示文案的背景 | false |
| qrcv_tipBackgroundColor | 提示文案的背景色 | #22000000 |
| qrcv_isScanLineReverse | 扫描线是否来回移动 | true |
| qrcv_isShowDefaultGridScanLineDrawable | 是否显示默认的网格图片扫描线 | false |
| qrcv_customGridScanLineDrawable | 扫描线的网格图片资源 | nulll |
| qrcv_isOnlyDecodeScanBoxArea | 是否只识别扫描框区域的二维码 | false |
接口说明
QRCodeView
/** * 设置扫描二维码的代理 * * @param delegate 扫描二维码的代理 */ public void setDelegate(Delegate delegate) /** * 显示扫描框 */ public void showScanRect() /** * 隐藏扫描框 */ public void hiddenScanRect() /** * 打开后置摄像头开始预览,但是并未开始识别 */ public void startCamera() /** * 打开指定摄像头开始预览,但是并未开始识别 * * @param cameraFacing Camera.CameraInfo.CAMERA_FACING_BACK or Camera.CameraInfo.CAMERA_FACING_FRONT */ public void startCamera(int cameraFacing) /** * 关闭摄像头预览,并且隐藏扫描框 */ public void stopCamera() /** * 延迟1.5秒后开始识别 */ public void startSpot() /** * 延迟delay毫秒后开始识别 * * @param delay */ public void startSpotDelay(int delay) /** * 停止识别 */ public void stopSpot() /** * 停止识别,并且隐藏扫描框 */ public void stopSpotAndHiddenRect() /** * 显示扫描框,并且延迟1.5秒后开始识别 */ public void startSpotAndShowRect() /** * 打开闪光灯 */ public void openFlashlight() /** * 关闭散光灯 */ public void closeFlashlight()
QRCodeView.Delegate 扫描二维码的代理
/** * 处理扫描结果 * * @param result */ void onScanQRCodeSuccess(String result) /** * 处理打开相机出错 */ void onScanQRCodeOpenCameraError()
QRCodeDecoder 解析二维码图片。几个重载方法都是耗时操作,请在子线程中调用。
/** * 同步解析本地图片二维码。该方法是耗时操作,请在子线程中调用。 * * @param picturePath 要解析的二维码图片本地路径 * @return 返回二维码图片里的内容 或 null */ public static String syncDecodeQRCode(String picturePath) /** * 同步解析bitmap二维码。该方法是耗时操作,请在子线程中调用。 * * @param bitmap 要解析的二维码图片 * @return 返回二维码图片里的内容 或 null */ public static String syncDecodeQRCode(Bitmap bitmap)
QRCodeEncoder 创建二维码图片。几个重载方法都是耗时操作,请在子线程中调用。
/** * 同步创建黑色前景色、白色背景色的二维码图片。该方法是耗时操作,请在子线程中调用。 * * @param content 要生成的二维码图片内容 * @param size 图片宽高,单位为px */ public static Bitmap syncEncodeQRCode(String content, int size) /** * 同步创建指定前景色、白色背景色的二维码图片。该方法是耗时操作,请在子线程中调用。 * * @param content 要生成的二维码图片内容 * @param size 图片宽高,单位为px * @param foregroundColor 二维码图片的前景色 */ public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor) /** * 同步创建指定前景色、白色背景色、带logo的二维码图片。该方法是耗时操作,请在子线程中调用。 * * @param content 要生成的二维码图片内容 * @param size 图片宽高,单位为px * @param foregroundColor 二维码图片的前景色 * @param logo 二维码图片的logo */ public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, Bitmap logo) /** * 同步创建指定前景色、指定背景色、带logo的二维码图片。该方法是耗时操作,请在子线程中调用。 * * @param content 要生成的二维码图片内容 * @param size 图片宽高,单位为px * @param foregroundColor 二维码图片的前景色 * @param backgroundColor 二维码图片的背景色 * @param logo 二维码图片的logo */ public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, int backgroundColor, Bitmap logo)
详细用法请查看ZBarDemo
QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式的更多相关文章
- PHP生成带logo图像二维码的两种方法
本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用 ...
- C#生成带logo的二维码
带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码. 生成的二维码效果如下: 下面直接贴出二维码生成类 QRCode ...
- .NET生成带Logo的二维码
使用ThoughtWorks.QRCode生成,利用这个库来生成带Logo的二维码(就是中间嵌了一个图片的二维码),直接见代码: HttpContext context = HttpContext.C ...
- 涛哥的Python脚本工具箱之生成带Logo的二维码
近期须要在二维码上加Logo,网上没有找到好用的,于是自己用python写了一个. 须要安装qrcode,PIL库 二维码简称 QR Code(Quick Response Code),学名为高速响应 ...
- phpqrcode生成带logo的二维码图片及带文字的二维码图片
<?php require_once "./phpqrcode/phpqrcode.php"; /** * 这样就可以生成二维码了,实际上在png这个方法里还有几个参数需要使 ...
- C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...
- Android相机、相册获取图片显示并保存到SD卡
Android相机.相册获取图片显示并保存到SD卡 [复制链接] 电梯直达 楼主 发表于 2013-3-13 19:51:43 | 只看该作者 |只看大图 本帖最后由 happy小妖同学 ...
- android 照相或从相册获取图片并裁剪
照相或从相册获取图片并裁剪 在android应用中很多时候都要获取图片(例如获取用户的头像)就需要从用户手机上获取图片.可以直接照,也可以从用户SD卡上获取图片,但获取到的图片未必能达到要求.所以要对 ...
- iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片
图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项 ...
随机推荐
- 【转】nagios 命令解释
nagios 命令解释 check_ssh 界面拼装参数格式如下共3个元素: 命令!端口!连接超时时间 ...
- VBA小技巧
运用VBA时,可以构造一些函数去实现诸如printf的方便函数. Public Function printf(mask As String, ParamArray tokens()) As Stri ...
- 应用ntpdate小工具同步时间
应用ntpdate小工具同步时间: ntpdate pool.ntp.org 中国的时间服务器有: ntpdate .cn.pool.ntp.org ntpdate .asia.pool.ntp.or ...
- 济南清北学堂游记 Day 3.
为什么你们都说下午题简单?我反而觉得下午题难...因为上午暴力很好写啊... 第一题惊了是一道博弈论,冷静推理一大波推出了正解,就变成了结论题. 可是结论题不都是水题吗? T2是一道关于异或的题,照例 ...
- BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]
题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...
- CF 375D. Tree and Queries加强版!!!【dfs序分块 大小分类讨论】
传送门 题意: 一棵树,询问一个子树内出现次数$\ge k$的颜色有几种,Candy?这个沙茶自带强制在线 吐槽: 本来一道可以离散的莫队我非要强制在线用分块做:上午就开始写了然后发现思路错了...: ...
- SpringMVC源码之参数解析绑定原理
摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...
- js小知识点
1.setTimeout(function(num){ alert(num);},1000,123); 第三个参数为实参. 2.拼接字符串: document.body.innerHTML = '&l ...
- for in 在数组和json中
数组中也有for--in,相较于对象中的用法是有区别的:数组中 var arr = ['曹操','曹植','曹丕'] for(i in arr){ console.log(i) //0 1 2 con ...
- Microsoft Visual Studio 中出现 Windows has triggered a breakpoint in xxx.exe的一个解决方案
今天在用VS发布Release版本的过程中,碰到了一个问题,就是程序编译没有问题,但是在运行过程中出现了 根据经验,此类问题一般都是由于程序开发过程中的代码编写不规范导致内存写覆盖或者是使用了不同版本 ...