Skip to content

xiaohuijun/Android-Zxing

 
 

Repository files navigation

###一、概述

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

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

###二、效果图 这里写图片描述

###三、下载APK体验

###四、引用

  • 本库依赖使用Gradle构建时添加一下即可:
compile 'com.mylhyl:zxingscanner:1.1.2'
compile 'com.google.zxing:core:3.2.1'
  • Gradle命令编译: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 addressResult = (AddressBookParsedResult) parsedResult;
		bundle.putStringArray(Intents.AddressBookConnect.NAME, addressResult.getNames());
		bundle.putStringArray(Intents.AddressBookConnect.NUMBER, addressResult.getPhoneNumbers());
		bundle.putStringArray(Intents.AddressBookConnect.EMAIL, addressResult.getEmails());
        break;
    case URI:
        URIParsedResult uriParsedResult = (URIParsedResult) parsedResult;
        bundle.putString(Intents.URIContents.URI, uriParsedResult.getURI());
        break;
    case TEXT:
        bundle.putString(Intents.Scan.RESULT, rawResult.getText());
        break;
}

生成二维码

Bitmap bitmap = QREncode.encodeQR(MainActivity.this,
        new QREncode.Builder()                
                .setColor(getResources().getColor(R.color.colorPrimary))//二维码颜色
                .setParsedResultType(ParsedResultType.URI)//二维码类型
                .setContents("https://github.com/mylhyl")//二维码内容
                .build());
imageView.setImageBitmap(bitmap);

###六、样式设置

方法名 说明 默认值
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

七、版本更新

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

About

android google zxing 可配置扫描框、线样式 http://blog.csdn.net/hupei/article/details/51859171

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%