一扫天下——ZXing使用全解析

二维码现在已经烂App了,不管什么App,没有二维码就好像低人一等了。所以,在自己的项目中集成二维码功能还是非常有必要的。

网上很多都是基于ZXing2.3的,但是现在都3.1了,改了很多bug,也进行了很多优化,最好按本文弄一下。

参拜ZXing

ZXing的github地址:
https://github.com/zxing/zxing

通过git clone git@github.com:zxing/zxing.git 命令我们可以把整个ZXing项目拉取下来。

然而这并没有什么卵用。

因为ZXing的项目是非常庞大的,功能也非常多,但是我们不需要这么多,我们只关心Android部分的。

获得ZXing的祝福之jar

在使用ZXing之前,我们需要先编译它的jar包,我们可以看见源代码目录中有一个core的目录,我们可以把这个文件夹导入eclipse作为一个java工程。最后通过export导出一个jar包。

获得ZXing核心功能

我们需要把核心的扫码、解码功能抽取出来,这一步,网上已经有很多人做过了,只是大部分都是基于第一个抽ZXing的人,而那个是基于ZXing1.5、2.3的,所以,记得要进行Update哦。

那么我们如何获得最新的ZXing代码呢,很简单,找一个旧的,然后把最新的代码一个个copy过去替换就好了,当然,还是会有一些问题,不过一步步解决就可以了,都不是很大的问题。

饭来张口

这里为大家也提供一个封装好的最新的ZXing Lib:

https://github.com/xuyisheng/ZXingLib

基于ZXing3.1封装,包含了最新的jar包和代码。

解析

CaptureActivity

ZXing暴露的调用Activity。在handleDecode方法中对扫码成功后的动作作处理。

ViewfinderView

ZXing扫码窗口的绘制,原始的ZXing使用这种方式去绘制,在上面提供的开源库中,作者将扫描框的绘制直接抽取到了XML文件中,这样修改起来更加方便了。

CameraConfigurationManager

修改横竖屏、处理变形效果的核心类。

在public void setDesiredCameraParameters(Camera camera, boolean safeMode)方法中(读取配置设置相机的对焦模式、闪光灯模式等等),可以将扫描改为竖屏:

即:
在方法最后加上:

/** 设置相机预览为竖屏 */
camera.setDisplayOrientation(90);

即可。

在public void initFromCameraParameters(Camera camera)方法中(计算了屏幕分辨率和当前最适合的相机像素),我们可以对修改为竖屏扫码后,由于像素信息点没有对调造成图像扭曲变形进行修改。

即:

在Log.d(TAG, “Screen resolution: ” + screenResolution);后加上如下的代码:

/** 因为换成了竖屏显示,所以不替换屏幕宽高得出的预览图是变形的 */
Point screenResolutionForCamera = new Point();
screenResolutionForCamera.x = screenResolution.x;
screenResolutionForCamera.y = screenResolution.y;if (screenResolution.x < screenResolution.y) {screenResolutionForCamera.x = screenResolution.y;screenResolutionForCamera.y = screenResolution.x;
}

最后,将screenResolution替换为screenResolutionForCamera:

cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);

DecodeHandler.decode

ZXing解码的核心类

CaptureActivityHandler

当DecodeHandler.decode完成解码后,系统会向CaptureActivityHandler发消息。如果编码成功则调用CaptureActivity.handleDecode方法对扫描到的结果进行分类处理。

最后

本文的Github中已经包含了前面所提到的所有修改(横竖屏、扭曲变形),用最新的ZXing代码进行了update,同时提供了编码、解码方法,并且将扫码界面抽取成XML(感谢开源作者),方便拓展。

https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib

重要的东西发三遍。

以上。

一扫天下——ZXing使用全解析相关推荐

  1. 阿里秋招面试全解析(含内推岗)

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  2. 微信App支付全解析

    简单介绍了微信移动支付的申请.接入.使用.确认支付结果等相关流程 0 系列文章 系列一 微信App支付全解析 系列二 支付宝App支付全解析 系列三 微信公众号支付全解析 系列四 微信扫码支付全解析 ...

  3. 麦马计算机专业对化学的要求,2018麦克马斯特大学最新入学要求+热门专业全解析...

    原标题:2018麦克马斯特大学最新入学要求+热门专业全解析 在前几期推送中我们给大家介绍了好几所不同大学的申请条件以及热门专业,今天我们就来看看汉密尔顿市的麦克马斯特大学吧! 麦克马斯特大学(McMa ...

  4. Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

    本文转载自郭神的Glide分析系列:http://blog.csdn.net/guolin_blog/article/details/78582548 本文同步发表于我的微信公众号,扫一扫文章底部的二 ...

  5. Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53939176 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  6. Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78357251 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  7. Android图片加载框架最全解析(三),深入探究Glide的缓存机制

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/54895665 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  8. 主板诊断卡代码全解析

    主板诊断卡代码全解析 RUN灯功能介绍 该灯只用极少部件,故自身故障率极低,且只需极少的主板插槽信号,故即使插到一个坏的插槽中虽无法走代码,或其它的所有指示灯都不亮,但该灯很有可能照常工作,您可根据: ...

  9. Python 常见的 170 道面试题全解析:2022 版

    Python 常见的 170 道面试题全解析:2019 版 语言特性 1.谈谈对 Python 和其他语言的区别 答:Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第 ...

最新文章

  1. 属性(Properties)和字段在C#中的关系
  2. python画曲线-python绘制动态曲线教程
  3. 位运算实现用户留存率
  4. 外架小横杆外露长度规范要求_脚手架各部位构造要求解读!
  5. 【Azure + Core】实现CI/CD(一)构建镜像并推送仓库
  6. Angular 星级评分组件
  7. LeetCode 1180. 统计只含单一字母的子串
  8. mysql全局变量和局部变量的区别_详细讲解mysql全局变量与局部变量
  9. 机器学习的gridSearchCV调参
  10. android google地图点聚合样式修改
  11. 一图看懂什么是集成电路?
  12. 笔记本指纹识别linux版驱动程序,联想Thinkpad指纹识别驱动
  13. 干货!10分钟,用Python生成图文并茂的PDF报告!
  14. 2021年全国大学生电子设计竞赛官方通知正式发布
  15. 图像处理笔记(0)---- 图像空间知识
  16. 理解IGRP协议-ielab
  17. IDEA maven 项目 POM文件变灰色或有个虫子(蜘蛛标记)
  18. 普中tft彩屏驱动程序下载_tft彩屏驱动程序
  19. java%3c%3e符号,有趣的 JavaScript 格式转换
  20. 净利润同比增长54%,阿里巴巴下沉市场称王?

热门文章

  1. 退出登录之后在进入如何回到原来页面
  2. 201910010013(作业一)
  3. vivado生成ltx文件命令_Vivado生成及使用edf文件
  4. 谁能告诉我文字生成图片在线制作要如何做?
  5. Docker---(9)Docker中容器无法停止无法删除
  6. 戴尔r330服务器安装系统鼠标,dell-poweredge – 在PowerEdge R330上安装Ubuntu服务器时出现问题(硬件RAID1)...
  7. 【T+】T+登录软件提示“账号或者密码不正确,或用户不在云应用开通的企业中”
  8. 全新的水循环真空泵知识小解
  9. 苹果cms播放页html,苹果cms播放器添加教程
  10. 使用request对象实现注册实例,请求方式编码的问题