一扫天下——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作为一个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使用全解析的更多相关文章
- iOS Storyboard全解析
来源:http://iaiai.iteye.com/blog/1493956 Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果, ...
- Android图片载入框架最全解析(一),Glide的基本使用方法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...
- Storyboard 全解析
XCode 4.3.2 新功能 - Storyboard 最近开始比较有空在玩 XCode 4.3.2,赫然发现它多了个 Storyboard 的东东. Storyboard 这个东西一般来说是在做创 ...
- Google Maps地图投影全解析(3):WKT形式表示
update20090601:EPSG对该投影的编号设定为EPSG:3857,对应的WKT也发生了变化,下文不再修改,相对来说格式都是那样,可以到http://www.epsg-registry.or ...
- C#系统缓存全解析(转载)
C#系统缓存全解析 对各种缓存的应用场景和方法做了很详尽的解读,这里推荐一下 转载地址:http://blog.csdn.net/wyxhd2008/article/details/8076105
- 【凯子哥带你学Framework】Activity界面显示全解析
前几天凯子哥写的Framework层的解析文章<Activity启动过程全解析>,反响还不错,这说明“写让大家都能看懂的Framework解析文章”的思想是基本正确的. 我个人觉得,深入分 ...
- 【转载】Fragment 全解析(1):那些年踩过的坑
http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...
- (转)ASP.NET缓存全解析6:数据库缓存依赖
ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓 ...
- jQuery Ajax 实例 全解析
jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...
随机推荐
- Selenium2 鼠标悬停效果实现
对一些js控件,鼠标悬停的时候出发下拉层的实现 1.使用Action public void moveToElement(WebDriver driver, By locator) { Actions ...
- JS将JSON日期转换为指定格式的日期
1.引入JS日期转换的函数库 function Format(now,mask) { var d = now; var zeroize = function (value, length) { if ...
- Scala学习随笔——Scala起步
实验楼学习Scala语言的笔记,课程网址为https://www.shiyanlou.com/courses/490 一.Scala简介 Scala 是一门多范式的编程语言,类似于 Java .设计初 ...
- Flex与51单片机socket通信 策略问题
直接把<cross-domain-policy> <allow-access-from domain="*" to-ports="*"/> ...
- c# 防止重复运行 弹出已运行窗口并传递消息
最近在写一款软件 软件是用来接收其他程序传递过来的命令行,并形成列表 大概的最终效果就像下图一样 原本为了程序美观是打算用listbox自绘列表,字和图片都绘制好了发现自己不会绘制按钮 所以最终采用了 ...
- Flask-宏的相关知识。
转自ITOYO:XIAOJINGJING Jinja2的宏功能有些类似于传统程序语言中的函数,既然是函数就有其声明和调用两个部分. 首先声明一个宏: <html lang="en&qu ...
- 【原创】Win7 IE故障:APPCRASH,d3d9.dll,c0000005
问题 今天使用使用IE登录某网址,发现总是报错,如下图,无法浏览. 解决方案 主要讲IE的呈现方案修改即可,如下步骤: 在IE的[Internet选项]选择[高级]选项卡,在[加速的图形]中勾选[使用 ...
- J.U.C并发框架源码阅读(七)CyclicBarrier
基于版本jdk1.7.0_80 java.util.concurrent.CyclicBarrier 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is ...
- (4)oracle连接工具和配置监听
一.SQL PLUS sql plus 是oracle最常用的命令行工具,启动sqlplus工具的方法有两种 1. 是在安装好的oracle开始程序的路径下运行程序 点击运行弹出此界面 2 .是在cm ...
- Controlled Tournament(状态压缩DP)
Controlled Tournament 题意 n 名选手进行淘汰赛,R[i][j] = 1 表示 i 能胜过 j.要求通过安排淘汰赛使得,m 选手获得最终胜利,问使得比赛数最少的方案数. 分析 设 ...