一扫天下——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作为一个javaproject。

最后通过export导出一个jar包。

获得ZXing核心功能

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

那么我们怎样获得最新的ZXing代码呢,非常easy,找一个旧的。然后把最新的代码一个个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. iOS Storyboard全解析

    来源:http://iaiai.iteye.com/blog/1493956 Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果, ...

  2. Android图片载入框架最全解析(一),Glide的基本使用方法

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

  3. Storyboard 全解析

    XCode 4.3.2 新功能 - Storyboard 最近开始比较有空在玩 XCode 4.3.2,赫然发现它多了个 Storyboard 的东东. Storyboard 这个东西一般来说是在做创 ...

  4. Google Maps地图投影全解析(3):WKT形式表示

    update20090601:EPSG对该投影的编号设定为EPSG:3857,对应的WKT也发生了变化,下文不再修改,相对来说格式都是那样,可以到http://www.epsg-registry.or ...

  5. C#系统缓存全解析(转载)

    C#系统缓存全解析 对各种缓存的应用场景和方法做了很详尽的解读,这里推荐一下 转载地址:http://blog.csdn.net/wyxhd2008/article/details/8076105

  6. 【凯子哥带你学Framework】Activity界面显示全解析

    前几天凯子哥写的Framework层的解析文章<Activity启动过程全解析>,反响还不错,这说明“写让大家都能看懂的Framework解析文章”的思想是基本正确的. 我个人觉得,深入分 ...

  7. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  8. (转)ASP.NET缓存全解析6:数据库缓存依赖

    ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓 ...

  9. jQuery&nbsp;Ajax&nbsp;实例&nbsp;全解析

    jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...

随机推荐

  1. 推荐几个好用的PHP集成开发环境

    (转自:http://blog.sina.com.cn/s/blog_5bd6b45101011bu2.html ) 分类: PHP PHP新手在准备正式开始写PHP代码的时候,不幸的是被PHP的开发 ...

  2. 01深入理解C指针之---指针含义符号

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 1.指针的含义: 指针本身也是变量,与其他一般变量不同的是:指针变量中没有存储具体类型 ...

  3. VS MFC 改变AfxMessageBox标题 AFX_IDS_APP_TITLE

    其实这个标题在资源String Table里就能找到,查找AFX_IDS_APP_TITLE,在这里你就能轻而易举的改变标题了. 注意:有的工程的资源String Table里面没有添加AFX_IDS ...

  4. UVA 10801 Lift Hopping 最短路

    2种方式直接代码就可以了.注意首次不需要60S的转换 #include <map> #include <set> #include <list> #include ...

  5. python requests高级耍法

    昨天,我们更多的讨论了request的基础API,让我们对它有了基础的认知.学会上一课程,我们已经能写点基本的爬虫了.但是还不够,因为,很多站点是需要登录的,在站点的各个请求之间,是需要保持回话状态的 ...

  6. C++11中的小细节--字符串的原始字面量

    原始字面量很容易理解,即不进行转义的完整字符串. 最近看了看Python,其中讲到了原始字符串. Both string and bytes literals may optionally be pr ...

  7. dict和set背后的实现原理

    # 先说结论 ''' dict的性能远大于list 在list中,随着数据的增大,时间也会增大 在dict中,随着数据的增大,时间没有变化 ''' # 目的:我们研究为什么dict的性能远大于list ...

  8. 转载——为Xamarin更好的开发而改写的库

    本人现今一直奋战在Xamarin.Android,可能有人会疑惑Xamarin本身就是跨平台的,为什么不能直接跨IOS和Android,这个当然是最后的目标,只是现今你连Android都不能拿出符合商 ...

  9. C# api基础1

    1.创建一个简单的api 目录结构 再创建一个controller用来测试 public class DefaultController : ApiController { public string ...

  10. (3)C#工具箱-容器

    容器特点:把控件放到容器里,移动容器控件也会跟着移动. 1.flowLayoutPanel(流布局控件) 放入控件后,会自动垂直或水平排列 拉长布局,控件自动跑到一行 2.GroupBox(组合框) ...