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

注:本文使用的是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软件

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是Android生成logo的二维码的步骤: 1. 引入依赖坐标 在项目的build.gradle文件中,添加以下依赖坐标: ```groovy implementation 'com.google.zxing:core:3.4.0' implementation 'com.journeyapps:zxing-android-embedded:3.6.0' ``` 2. 简单二维码实现 使用ZXing生成简单的二维码,可以参考以下代码: ```java import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; public class MainActivity extends AppCompatActivity { private ImageView qrCodeImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); qrCodeImageView = findViewById(R.id.qr_code_image_view); String content = "https://www.example.com"; // 二维码内容 try { // 设置二维码的宽高 int width = 400; int height = 400; // 创建QRCodeWriter对象 QRCodeWriter writer = new QRCodeWriter(); // 使用QRCodeWriter对象生成BitMatrix对象 BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height); // 创建一个空的Bitmap对象 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); // 遍历BitMatrix对象,设置Bitmap对象的像素值 for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { bitmap.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE); } } // 设置ImageView显示二维码图片 qrCodeImageView.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } } ``` 3. logo的二维码实现 为了生成logo的二维码,我们可以在生成二维码的基础上,将logo图片合并到二维码中。可以参考以下代码: ```java import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; public class MainActivity extends AppCompatActivity { private ImageView qrCodeImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); qrCodeImageView = findViewById(R.id.qr_code_image_view); String content = "https://www.example.com"; // 二维码内容 int logoResId = R.drawable.logo; // logo图片资源ID try { // 设置二维码的宽高 int width = 400; int height = 400; // 创建QRCodeWriter对象 QRCodeWriter writer = new QRCodeWriter(); // 使用QRCodeWriter对象生成BitMatrix对象 BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height); // 创建一个空的Bitmap对象 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); // 遍历BitMatrix对象,设置Bitmap对象的像素值 for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { bitmap.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE); } } // 加载logo图片 Bitmap logoBitmap = BitmapFactory.decodeResource(getResources(), logoResId); // 创建一个新的Bitmap对象,用于合并二维码logo图片 Bitmap resultBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); // 创建一个Canvas对象,用于绘制二维码logo图片 Canvas canvas = new Canvas(resultBitmap); // 绘制二维码 canvas.drawBitmap(bitmap, 0, 0, null); // 计算logo图片的宽高 int logoWidth = width / 4; int logoHeight = height / 4; // 设置logo图片的绘制区域 int logoLeft = (width - logoWidth) / 2; int logoTop = (height - logoHeight) / 2; int logoRight = logoLeft + logoWidth; int logoBottom = logoTop + logoHeight; // 创建一个Paint对象,用于设置logo图片的抗锯齿和透明度 Paint paint = new Paint(); paint.setAntiAlias(true); paint.setAlpha(255); // 绘制logo图片 canvas.drawBitmap(logoBitmap, null, new Rect(logoLeft, logoTop, logoRight, logoBottom), paint); // 设置ImageView显示logo的二维码图片 qrCodeImageView.setImageBitmap(resultBitmap); } catch (WriterException e) { e.printStackTrace(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值