Skip to content

android google zxing 可配置扫描框、线样式 ,生成二维码(文字、联系人)

Notifications You must be signed in to change notification settings

yysnow/Android-Zxing

 
 

Repository files navigation

一、概述

相信Adnroid开发都知道,有四款扫描器,ZxingZbarBarcode4JOkapiBarcode 前二者应用较广泛,至于介绍与区别就在此阐述,网上有很多。此文主要介绍在在使用过程中,官方客户端各种达不到需求。相信很多童鞋都有此体会,所以借此机会就在Zxing 官方客户端基础上修改,去除无用功能并二次封装达到可扩展。

  • 官方客户端目前问题汇总
  • 设置功能多余
  • 竖屏后不能正向扫描条形码
  • 扫描框大小、颜色、扫描线配置不够灵活
  • 无生成二维码、主动识别二维码功能
  • 介于以上问题,于是该库就华丽的诞生
  • 修复竖屏不能正向扫描条形码
  • 可定制扫描框与扫描线样式
  • 加入创建二维码、识别图片中的二维码功能

二、效果图

四、引用

1、在线

  • 本库依赖使用Gradle构建时添加一下即可,已依赖zxing:core:3.3.0
compile 'com.mylhyl:zxingscanner:1.4.1'

2、离线jar,需要手动添加 Zxing 核心库

核心库二种方式:

1、最新Zxing核心库点击查看,使用Gradle构建时如下:

compile 'com.google.zxing:core:3.3.0'

2、本地依赖jar文件 win终端执行:gradlew makeJar

gradle makeJar 或者参考下图,在android studio中执行

这里写图片描述

###五、使用 直接在layout xml使用ScannerView即可

<com.mylhyl.zxing.scanner.ScannerView
    android:id="@+id/scanner_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
注意生命周期中的使用

重写onResume调用mScannerView.onResume();

@Override
protected void onResume() {
    mScannerView.onResume();
    super.onResume();
}

@Override
protected void onPause() {
    mScannerView.onPause();
    super.onPause();
}

注册扫描成功监听器setOnScannerCompletionListener

/**
 * 扫描成功后将调用
 *
 * @param rawResult    扫描结果
 * @param parsedResult 结果类型
 * @param barcode      扫描后的图像
 */
void OnScannerCompletion(Result rawResult, ParsedResult parsedResult, Bitmap barcode);

调用如下方法获取类型

ParsedResultType type = parsedResult.getType();

可根据type强转为相应的对象,按项目需求处理。每个项目都有不同的需求,所以此库将最终处理结果丢给你们自己咯,想怎么玩就怎么玩,下面代码是在 sample 中

switch (type) {
    case ADDRESSBOOK:
		 AddressBookParsedResult addressBook = (AddressBookParsedResult) parsedResult;
         bundle.putSerializable(Intents.Scan.RESULT, new AddressBookResult(addressBook));
        break;
    case URI:
        URIParsedResult uriParsedResult = (URIParsedResult) parsedResult;
        bundle.putString(Intents.Scan.RESULT, uriParsedResult.getURI());
        break;
    case TEXT:
        bundle.putString(Intents.Scan.RESULT, rawResult.getText());
        break;
}

生成二维码使用

//联系人类型
Bitmap bitmap = new QREncode.Builder(this)
        .setParsedResultType(ParsedResultType.ADDRESSBOOK)
        .setAddressBookUri(contactUri).build().encodeAsBitmap();

//文本类型
Bitmap bitmap = new QREncode.Builder(this)
        .setColor(getResources().getColor(R.color.colorPrimary))//二维码颜色
        //.setParsedResultType(ParsedResultType.TEXT)//默认是TEXT类型
        .setContents("我是石头")//二维码内容
        .setLogoBitmap(logoBitmap)//二维码中间logo
        .build().encodeAsBitmap();

###六、样式设置

方法名 说明 默认值
toggleLight 切换闪光灯 关false
setMediaResId 设置扫描完成播放声音
setLaserFrameBoundColor 扫描框4角颜色 绿色0xff00ff00
setLaserFrameCornerLength 扫描框4角长度 15dp
setLaserFrameCornerWidth 扫描框4角宽度 2dp
setLaserColor 扫描线颜色 绿色0xff00ff00
setLaserLineResId 条形扫描线图片资源
setLaserGridLineResId 网格扫描线资源
setLaserLineHeight 扫描线高度 2dp
setLaserFrameSize 设置扫描框大小 屏幕5/8
setLaserFrameTopMargin 设置扫描框与屏幕距离 屏幕5/8-状态
setDrawText text -> 内容
textSize -> 文字大小
textColor -> 文字颜色
isBottom -> 是否在扫描框下方
textMargin -> 离扫描框间距
text -> 将二维码放入框内,即可自动扫描
textSize -> 16sp
textColor -> 白色
isBottom -> true
textMargin -> 20dp
setScanMode 设置扫描类型:二维码、一维码 二维码
isShowResThumbnail 是否显示扫描结果缩略图 false
setLaserMoveSpeed 设置扫描框线移动间距 6px

七、注意事项

权限

<uses-permission android:name="android.permission.CAMERA" />

对于setLaserFrameTopMargin方法,扫描区域偏移的问题issues-13

QQ交流群:630413339 点击链接加入群Android-Zxing

八、版本更新

1.4.0 增加扫描类型setScanMode

1.3.1 优化代码

1.3.0 生成二维码增加logo

1.2.2 修复扫描提示文字颜色无效、支持自动换行

1.2.1 修复依赖提示Failed to resolve:Android-Zxing:zxing:3.2.2的错误

1.2.0 生成二维码增加setAddressBookUri(Uri contactUri)设置联系人Uri方法,更方便的使用

1.1.3 重新装饰ParsedResult各实现类并Serializable

1.1.2 修复锁屏onPause生命周期没有摧毁,导致onResume时抛出RuntimeException异常

About

android google zxing 可配置扫描框、线样式 ,生成二维码(文字、联系人)

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%