android二维码扫描、读取、识别、生成、带logo

来源:互联网 发布:长沙知豆电动车租赁 编辑:程序博客网 时间:2024/06/05 19:44

注:本文使用的是Github上的工程,点击访问,如您是原作者,如有侵权,麻烦联系我删除!

效果图(摄像头扫描在代码中有,但是由于录屏原因,效果图没有录制):

这里写图片描述


原作者基本把关于二维码的操作基本都封装好了,使用起来也比较简单,本文只是轻讲解关于怎么使用,基本可以满足所有要求,推荐使用!


首先是添加依赖到as中,两个版本任选一个(建议使用最新版):

    (老版本)    compile 'cn.bingoogolapple:bga-qrcodecore:1.0.7@aar'    compile 'cn.bingoogolapple:bga-zxing:1.0.7@aar'    compile 'com.android.support:design:23.3.0'    (最新版)    compile 'com.google.zxing:core:3.2.1'    compile 'cn.bingoogolapple:bga-qrcodecore:1.1.3@aar'    compile 'cn.bingoogolapple:bga-zxing:1.1.3@aar'


添加所用到的权限

//调用相机<uses-permission android:name="android.permission.CAMERA" />//震动(用不到震动可以去掉)<uses-permission android:name="android.permission.VIBRATE" />//闪光灯(如不用闪光灯可以去掉)<uses-permission android:name="android.permission.FLASHLIGHT" />


一、摄像头读取二维码:

首先,布局文件中使用封装好的布局:

<cn.bingoogolapple.qrcode.zxing.ZXingView        android:id="@+id/zx_view"        android:layout_width="match_parent"        android:layout_height="match_parent"        app:qrcv_animTime="1000"        app:qrcv_borderColor="@android:color/white"        app:qrcv_borderSize="1dp"        app:qrcv_cornerColor="@color/colorPrimaryDark"        app:qrcv_cornerLength="20dp"        app:qrcv_cornerSize="3dp"        app:qrcv_maskColor="#99000000"        app:qrcv_rectWidth="200dp"        app:qrcv_scanLineColor="@color/colorPrimaryDark"        app:qrcv_scanLineSize="1dp"        app:qrcv_topOffset="90dp" />


参数参考:

属性名 说明 默认值 qrcv_topOffset 扫描框距离扫描视图顶部的距离 90dp qrcv_cornerSize 扫描框边角线的宽度 3dp qrcv_cornerLength 扫描框边角线的长度 20dp qrcv_cornerColor 扫描框边角线的颜色 @android:color/white qrcv_rectWidth 扫描框的宽度 200dp qrcv_maskColor 除去扫描框,其余部分阴影颜色 33FFFFFF qrcv_scanLineSize 扫描线的宽度 1dp qrcv_scanLineColor 扫描线的颜色「扫描线和默认的扫描线图片的颜色」 @android:color/white qrcv_scanLineHorizontalMargin 扫描线距离左右边框的间距 0dp qrcv_isShowDefaultScanLineDrawable 是否显示默认的图片扫描线「设置该属性后 qrcv_scanLineSize 将失效,可以通过qrcv_scanLineColor设置扫描线的颜色,避免让你公司的UI单独给你出特定颜色的扫描线图片」 false qrcv_customScanLineDrawable 扫描线的图片资源「默认的扫描线图片样式不能满足你的需求时使用,设置该属性后qrcv_isShowDefaultScanLineDrawable、qrcv_scanLineSize、qrcv_scanLineColor 将失效」 null qrcv_borderSize 扫描边框的宽度 1dp qrcv_borderColor 扫描边框的颜色 @android:color/white qrcv_animTime 扫描线从顶部移动到底部的动画时间「单位为毫秒」 1000



然后在activity中给控件设置好识别处理监听

        //设置结果处理        //mQR.setResultHandler(this);(如果使用的老版本的依赖,使用这个)        mQR.setDelegate(this);(如果使用的新版本的依赖,使用这个)        //开始读取二维码        mQR.startSpot();


然后当前类实现QRCodeView.Delegate,实现两个回调,onScanQRCodeSuccess()与onScanQRCodeOpenCameraError():

   /**     * 扫描二维码成功     * @param result 识别的结果     */    @Override    public void onScanQRCodeSuccess(String result) {        Toast.makeText(ScanActivity.this, result, Toast.LENGTH_SHORT).show();    }    /**     * 打开相机出错     */    @Override    public void onScanQRCodeOpenCameraError() {        Toast.makeText(ScanActivity.this, "打开相机出错!请检查是否开启权限!", Toast.LENGTH_SHORT).show();    }



下面是控件方法总结:

mQR.startCamera();开启预览,但是并未开始识别
mQR.stopCamera();停止预览,并且隐藏扫描框
mQR.startSpot();开始识别二维码
mQR.stopSpot();停止识别
mQR.startSpotAndShowRect();开始识别并显示扫描框
mQR.stopSpotAndHiddenRect();停止识别并隐藏扫描框
mQR.showScanRect();显示扫描框
mQR.hiddenScanRect();隐藏扫描框
mQR.openFlashlight();开启闪光灯
mQR.closeFlashlight();关闭闪光灯
mQR.startSpotDelay(ms);延迟ms毫秒后开始识别



以上就是扫描读取二维码,比较简单,就不做过多介绍

二、生成二维码以及识别图片上的二维码

生成二维码与生成带logo的二维码都调用QRCodeEncoder.encodeQRCode()方法:

生成二维码:

        /**          * 生成二维码          * 第一个参数为要生成的文本          * 第二个参数为生成尺寸          * 第三个参数为生成回调          */          QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), new QRCodeEncoder.Delegate() {            /**             * 生成成功             * @param bitmap             */            @Override            public void onEncodeQRCodeSuccess(Bitmap bitmap) {                ivqr.setImageBitmap(bitmap);            }            /**             * 生成失败             */            @Override            public void onEncodeQRCodeFailure() {                Toast.makeText(GenerateActivity.this, "生成二维码失败", Toast.LENGTH_SHORT).show();            }        });

生成带logo二维码:

/**  * 生成二维码  * 第一个参数为要生成的文本  * 第二个参数为生成尺寸  * 第三个参数为生成二维码颜色  * 第四个参数为logo资源  * 第五个参数为生成回调  */         QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), Color.parseColor("#000000"), ((BitmapDrawable)ivlogo.getDrawable()).getBitmap(), new QRCodeEncoder.Delegate() {            @Override            public void onEncodeQRCodeSuccess(Bitmap bitmap) {                ivqr.setImageBitmap(bitmap);            }            @Override            public void onEncodeQRCodeFailure() {                Toast.makeText(GenerateActivity.this, "生成带logo的二维码失败", Toast.LENGTH_SHORT).show();            }        });

解析图片上的二维码、条形码:

/**  * 解析二维码、条形码  * 第一个参数为带有二维码的图片  * 第二个参数为解析回调  */  QRCodeDecoder.decodeQRCode(bitmap, new QRCodeDecoder.Delegate() {            /**              * 解析成功              */             @Override            public void onDecodeQRCodeSuccess(String result) {                Toast.makeText(GenerateActivity.this, result, Toast.LENGTH_SHORT).show();            }            /**              * 解析失败              */             @Override            public void onDecodeQRCodeFailure() {                Toast.makeText(GenerateActivity.this, "解析二维码失败!", Toast.LENGTH_SHORT).show();            }        });


好了,就介绍到这里,基本也没什么说的,本文只是说下使用方法,使用起来也比较灵活,比较简单,赞一下!



本文内容如有不懂,可以下载apk安装手机看看效果,也可以参考代码!

本文相关下载: 点击免费下载源码      点击免费下载apk软件

1 0
原创粉丝点击