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,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项 ...
随机推荐
- Matlab 多项式拟合、稳健滤波等实用函数
Function summary http://www.biomecardio.com/matlab/index.html clinspace Curvilinearly spaced points ...
- 几次面试后才弄懂的HashMap
本人大四,以前也开发过几个项目,Map相关集合也总用.但是从来没有研究过底层的实现,只知道杂用.结果在最开始的几次面试中一脸懵逼.认识到不足后,浅显的学习了一下,总结成一下几点.(如果写错了还望指正) ...
- vue调试神器vue-devtools安装
vue-devtools安装 vue-devtools是一款用来调试Vue应用的Chrome插件,可极大提高开发者调试项目效率,接着我们说一下如何下载安装这个插件; 一. 从chrome商店直接下载安 ...
- js函数知识
1.函数基本知识 通过函数可以封装任意条语句,在任何地方调用,js中用function关键字来声明, //基本格式,函数名,传递参数,代码块 function functionName(arg0,ar ...
- execl列数据成等差递增递减
如上图若想以10,20,30...这样递增: 1).首先需选中10,20所在的单元格,鼠标移至20所在的单元格右下角 2).此时会出现一个十字"十"符号,点击直向下拖动至某个地方, ...
- template.compile()方法
template.compile(source, options) source:必传,渲染模板的内容. options:可选,通常不传.(其实是我还没研究明白) return:一个渲染函数. 示例如 ...
- JAVA并发编程学习笔记------对象的可见性及发布逸出
一.非原子的64位操作: 当线程在没有同步的情况下读取变量时,可能会得到一个失效值,但至少这个值是由之前某个线程设置的值,而不是一个随机值,这种安全性保证被称为最低安全性.最低安全性适用于绝大多数变量 ...
- Kitty猫基因编码
原题链接:https://www.luogu.org/problemnew/show/2562#sub 简单的递归题.记录一下前缀和然后二分求解就好. 参考代码: #include <iostr ...
- 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟
因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...
- 使用scrapy爬取豆瓣上面《战狼2》影评
这几天一直在学习scrapy框架,刚好学到了CrawlSpider和Rule的搭配使用,就想着要搞点事情练练手!!! 信息提取 算了,由于爬虫运行了好几次,太过分了,被封IP了,就不具体分析了,附上& ...