Android 自定义二维码样式AwesomeQRCode第三方库使用

AwesomeQRCode第三方库GitHub地址:https://github.com/SumiMakito/AwesomeQRCode

一.添加依赖(最新版本是1.2.0)

dependencies {
    implementation 'com.github.SumiMakito:AwesomeQRCode:1.2.0'
}

二.设置基础信息

   private Color color;
    private StillBackground Sbackground;
    private BlendBackground Bbackground;
    private GifBackground Gbackground;
    private Logo logo;
    private RenderOption renderOption;
    private Bitmap bitmap;
  
    //从mipmap资源拿图片,作为Logo和背景图(两者可以使用不同图片)
    bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_colorful_logo, null);

        //调色板颜色信息设置
        color = new Color();
        color.setLight(0xff000000);//用于空格
        color.setDark(0xff000000);//用于非空格
        color.setBackground(0xFFFFFFFF);//用于背景(将被背景图像覆盖,如果设置)
        color.setAuto(false);//设置为true以自动从背景图像中挑选颜色(仅在背景图像存在时才有效)

        //静止背景(静止图像作为背景)
        Sbackground = new StillBackground();
        Sbackground.setBitmap(bitmap); //背景图
        Sbackground.setClippingRect(new Rect(0, 0, 100, 100)); //之前裁剪背景,
        Sbackground.setAlpha(0.7f); //要绘制的背景的alpha

        //要绘制的背景的alpha
        Bbackground = new BlendBackground();
        Bbackground.setBitmap(bitmap);//背景图
        Bbackground.setClippingRect(new Rect(0, 0, 100, 100));
        Bbackground.setAlpha(0.7f);
        Bbackground.setBorderRadius(10); //用于混合角的半径

        //一个gif背景(动画)
        Gbackground = new GifBackground();
        Gbackground.setInputFile(gifFile); //将gif图像的文件对象分配给该字段
        Gbackground.setOutputFile(new File(pictureStorage, "output.gif"));  //输出图像将保存到此文件对象中
        Gbackground.setClippingRect(new Rect(0, 0, 200, 200));
        Gbackground.setAlpha(0.7f);

        //Logo信息设置
        logo = new Logo();
        logo.setBitmap(bitmap);
        logo.setBorderRadius(10); //徽标角的半径
        logo.setBorderWidth(10); //徽标周围添加边框的宽度
        logo.setScale(0.3f); //在QR码中缩放徽标
        logo.setClippingRect(new RectF(0, 0, 100, 100)); //在将徽标图像应用于QR码之前裁剪徽标图像,裁剪的不能大于bitmap宽高

        //渲染
        renderOption = new RenderOption();
        renderOption.setContent("20190716");//要编码的内容
        renderOption.setSize(800);//最终QR码图像的大小(不设置大小,直接填充控件大小)
        renderOption.setBorderWidth(20);//QR码周围空白区域宽度
        renderOption.setEcl(ErrorCorrectionLevel.M);//(可选)指定纠错级别
        renderOption.setPatternScale(0.35f);//(可选)指定模式的比例
        renderOption.setRoundedPatterns(true);//(可选)如果为true,则将块绘制为点
        renderOption.setClearBorder(true);//如果设置为true,则不会在边框区域绘制背景
        renderOption.setColor(color);//为QR码设置调色板
        renderOption.setBackground(Sbackground);//设置背景
        renderOption.setLogo(logo);//设置Logo
三.获取二维码Bitmap
   try {
            /**
            * AwesomeQrRenderer.render(renderOption)可能会出现:                    
            *java.lang.IllegalArgumentException: x + width must be <= bitmap.width()错误
             * 宽度超出了你要截的图的宽度
             * (因为renderOption.setBackground用的是Sbackground)
             * 所以看Sbackground.setClippingRect(new Rect(0, 0, 100, 100));裁剪的大小跟bitmap宽高对比一下
            * */
            RenderResult result = AwesomeQrRenderer.render(renderOption);
            if (null != result.getBitmap()) {//背景是位图
                //awesomeCode是布局ImageView控件
                awesomeCode.setImageBitmap(result.getBitmap());

            } else if (result.getType() == RenderResult.OutputType.GIF) {//背景是Gbackground
                awesomeCode.setImageBitmap(result.getBitmap());

            } else {//出现问题

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值