You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端如何基于zxing实现自定义圆角、变色的类Instagram风格QR码?

基于ZXing实现QR码圆角效果的方案

你已经使用com.google.zxing:core:3.3.3生成了基础的黑色方角QR码,要实现圆角效果不需要更换依赖库,直接修改原有渲染逻辑即可,具体操作如下:

  • 第一步先获取QR码原始点位矩阵:通过QRCodeWriter.encode()方法生成存储每个点位显色状态的BitMatrix对象,这一步和你原先生成方角QR码的逻辑完全一致。
  • 第二步修改点位渲染规则:将原逻辑中给每个显色点位绘制矩形的操作,替换为绘制圆角矩形,需要注意两个细节:
    • 普通点位的圆角半径建议设置为单个点位边长的1/3~1/2,既能达到类似Instagram的柔和圆角效果,也不会影响扫码识别率
    • QR码三个角落的定位框不要和普通点位使用统一的圆角规则,建议单独绘制定位框的外圆角和内部色块圆角,避免降低识别准确率
  • 第三步渲染完成后做识别校验:测试不同距离、不同光线条件下的扫码成功率,避免圆角半径过大导致相邻点位粘连无法识别。

核心实现代码示例(Android端)

// 单个QR码点位的边长
int singleBlockSize = 10;
// 圆角半径,建议设为单个点位边长的0.4倍
float cornerRadius = singleBlockSize * 0.4f;
Paint qrPaint = new Paint();
qrPaint.setColor(Color.BLACK);
qrPaint.setAntiAlias(true);

// 遍历BitMatrix渲染每个点位
for (int x = 0; x < bitMatrix.getWidth(); x++) {
    for (int y = 0; y < bitMatrix.getHeight(); y++) {
        if (bitMatrix.get(x, y)) {
            // 替换原有drawRect方法,绘制圆角矩形
            canvas.drawRoundRect(
                x * singleBlockSize,
                y * singleBlockSize,
                (x + 1) * singleBlockSize,
                (y + 1) * singleBlockSize,
                cornerRadius,
                cornerRadius,
                qrPaint
            );
        }
    }
}

效果示例

圆角QR码示例

内容的提问来源于stack exchange,提问作者Kruti Bhatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:24:01