Android Zxing的简单使用

一、概述


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

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


二、效果图



三、下载APK体验



四、引用


  • 本库依赖使用Gradle构建时添加一下即可:
compile 'com.mylhyl:zxingscanner:1.2.0'
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 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 = QREncode.encodeQR(new QREncode.Builder(this)
        .setParsedResultType(ParsedResultType.ADDRESSBOOK)
        .setAddressBookUri(contactUri).build());

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


识别Imageview中的二维码


Bitmap bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();//将Imageview转成bitmap
                QRDecode.decodeQR(bitmap, new OnScannerCompletionListener() {
                    @Override
                    public void OnScannerCompletion(Result result, ParsedResult parsedResult, Bitmap bitmap) {
                        ParsedResultType type = parsedResult.getType();
                        switch (type) {
                            case ADDRESSBOOK:
                                break;
                            case EMAIL_ADDRESS:
                                break;
                            case PRODUCT:
                                break;
                            case URI:
                                break;
                            case TEXT:
                                TextParsedResult text = (TextParsedResult) parsedResult;
                                Toast.makeText(TextImageActivity.this,text.getText(),Toast.LENGTH_SHORT).show();
                                break;
                            case GEO:
                                break;
                            case TEL:
                                break;
                            case SMS:
                                break;
                            case CALENDAR:
                                break;
                            case WIFI:
                                break;
                            case ISBN:
                                break;
                            case VIN:
                                break;
                            default:
                                break;
                        }
                    }
                });


六、样式设置


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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值