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

一扫天下——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

重要的东西发三遍。

以上。

时间: 2024-10-09 20:33:12

一扫天下——ZXing使用全解析的相关文章

CSS 中z-index全解析

z-index全解析 Z-index属性决定了一个HTML元素的层叠级别. 元素层叠级别是相对于元素在Z轴上(与X轴Y轴相对照)的位置而言. 一个更高的Z-index值意味着这个元素在叠层顺序中会更靠近顶部.这个层叠顺序沿着垂直的线轴被呈现. 在一个HTML页面中,自然的层叠顺序(也就是元素在Z轴上的顺序)是由很多因素决定的: 具有负值的stacking contexts(层叠环境)元素,按照出现的先后顺序排列(越靠后层级越靠上); 没有被定位,没有浮动的块级元素,按照出现的先后顺序排列; 没有

WorldWind系列五:插件加载过程全解析

不得不承认World Wind的代码真的很庞大,没有太多帮助文档的前提下,一头钻进代码里肯定令你头疼的,甚至研究代码间关联仿佛是在走迷宫.我最近一直想弄明白如何在 MenuBar中加载那些插件的,WorldWind学习系列四中研究的只是特殊的三个功能加载的,那三个没有继承Plugin类,不算是插件功能加载.所以WorldWind学习系列四加载的三个是特殊情况,不是一般的插件加载.今天下午终于柳暗花明,如果你真正关注World Wind分析,那么就好好看看下面的插件加载过程全解析. 我们先看看Pl

2013最新CPU天梯图全解析

现在市场上主流的cpu处理器就是AMD和intel了.所以很多用户在购买电脑的时候都是考虑在这两个品牌中选择.但是好多网友只是对cpu处理器的性能方面一知半解.那么小编就把2013最新CPU天梯图全解析来跟大家说说在现在cpu的一些主流流向趋势.你也可以参照这种2013最新CPU天梯图来衡量你需要购买那种类型的cpu. 2013最新CPU天梯图: 以上就是最新2013cpu处理器天梯图的全解.现在你在选购cpu的时候就可以根据你的实际用途来选择是需要中端cpu还是只是入门级的cpu就能满足需求.

一屋不扫何扫天下 选型必做于细

近来笔者在采访中发现http://www.aliyun.com/zixun/aggregation/8504.html">流程管理无用论者大有人在,CIO认为流程管理不仅阻碍业务运作,复杂的流程设计还迫使工作效率低下,在企业选型过程中,CIO往往忽视了流程管理这个细节,为此IDS中国区总裁洪中表示:这是一个普遍性的问题,取决于CIO对于I怎么理解. IT技术在企业中间基本可以分为三类,第一类是基础实施,包括硬件.网络和硬件网络连在一起的整个IT通讯手段.第二类是网络中间被传输的信息,它主要

新浪微博V5版高清全解析 突出分组 定向发布

中介交易 SEO诊断 淘宝客 云主机 技术大厅 9月3日消息,新版新浪微博正式发放首批邀请码.新版微博命名"V5"版,V5版整体界面更为简洁流畅,拥有定向发布.个性化封面图等全新功能,微博交互更加智能.个性. 所谓"物以稀为贵",由于首批公测码数量极其有限,众多网友还无法抢先体验,有幸参与首批尝鲜的小编,将为大家奉上一篇新版微博的高清无码全解析版. 新首页:顶导精简.三栏格局.色调简洁 进入新版微博后,首先能看到的是整体页面格局的变化,彻底的三栏页面,对于喜欢宽维度

ASP.NET缓存全解析6:数据库缓存依赖

ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓存 ASP.NET 缓存全解析5:文件缓存依赖 ASP.NET 缓存全解析6:数据库缓存依赖 ASP.NET 缓存全解析7:第三方分布式缓存解决方案 Memcached和Cacheman 更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实

ASP.NET缓存全解析7:第三方分布式缓存解决方案 Memcached和Cacheman

ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓存 ASP.NET 缓存全解析5:文件缓存依赖 ASP.NET 缓存全解析6:数据库缓存依赖 ASP.NET 缓存全解析7:第三方分布式缓存解决方案 Memcached和Cacheman Memcached - 分布式缓存系统 1.Memcached是什么? Memcached是高性能的,分布式的内

微信Mars——xlog使用全解析

微信Mars--xlog使用全解析 如约而至,微信在12月19日开源了底层的通信库--Mars,其中有一个部分,是一个高性能的日志模块--xlog. xlog的详细介绍,大家可以参考微信技术公众号的这篇文章--微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog. 本篇文章将带领大家将xlog模块抽取出来,作为一个单独的模块来使用. 编译so库 首先,我们clone下Mars的源码,然后进入其中的libraries目录,直接执行下面的Python脚本: python build_

比特儿(Bter.com) 比特币交易平台被盗事件全解析

就在2014年8月15日晚,国内著名的山寨币交易所比特儿遭到攻击,被盗5000万个NXT(未来币).本事件一波三折,目前还在发酵中,但 一场完全透明却匿名的网络犯罪却呈现在我们面前,这是历史上的首次.我们继续关注事件的进展.498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="width: 513px; height: 215px" border="0" alt="