zoukankan      html  css  js  c++  java
  • 一扫天下——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

    重要的东西发三遍。

    以上。

  • 相关阅读:
    典型用户和用户场景
    每日站立会议个人博客(冲刺周)-Tuesday
    WPS中VB编辑器的安装
    WARN hdfs.DataStreamer: Caught exception
    java.net.ConnectException: Your endpoint configuration is wrong; For more details see: http://wiki.apache.org/hadoop/UnsetHostnameOrPort
    “初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException
    在Github上搭建个人主页
    关于新版的MySQL安装教程
    stopping hbasecat:/tmp/hbase-root-master.pid:No such file or directory
    途牛订单的服务化演进
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7252824.html
Copyright © 2011-2022 走看看