Android 二维码生成 (Zxing)

under Android  tag     Published on November 7th , 2020 at 09:56 am

生成二维码需要导入zxing.jar并添加依赖

implementation files('libs\\ZXing-3.3.3.jar')

Utils.java

写个工具类,生成二维码时调用。详情写在注释里了。

// text 为二维码内容,size 为二维码宽高,我这里设置的二维码宽高相同,如果需要宽高不同,可以自行改变传入的参数
public class Utils {
    public static Bitmap createQrcode(String text, int size) {
        Map<EncodeHintType, Object> hints = new HashMap<>();
        // 设置字符编码
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        // 设置二维码容错率。二维码容错率,分四个等级:H、L 、M、 Q,最高为H
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        try {
            // 图像数据转换,使用了矩阵转换 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数
            // BarcodeFormat.CODE_128类型为条形码
            // BarcodeFormat.QR_CODE类型为二维码
            BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, size, size, hints);
            int[] px = new int[size * size];
            // 两个for循环是图片横列扫描的结果
            for (int y = 0; y < size; y++) {
                for (int x = 0; x < size; x++) {
                    px[y * size + x] = bitMatrix.get(x, y) ? 0xff000000 : 0xffffffff;
                }
            }
            //返回位图Bitmap
            return Bitmap.createBitmap(px, 0, size, size, size, Bitmap.Config.RGB_565);
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }
}

调用工具类

工具类返回的 bitmap 放在 ImageView 控件中

ImageView iv = findViewById(R.id.qrcode);
String text = "生成二维码";
Bitmap bitmap = Utils.createQrcode(text, 300);
iv.setImageBitmap(bitmap);

布局文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">
    
    <ImageView
        android:id="@+id/qrcode"
        android:layout_width="300dp"
        android:layout_height="300dp" />
</LinearLayout>

本文由 surface 创作,采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:November 7th , 2020 at 10:28 am
分享到:Twitter  Weibo  Facebook