您当前的位置: 首页 >  android

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android -- 开源库】zxing (二维码)

Kevin-Dev 发布时间:2021-03-15 18:17:40 ,浏览量:0

在这里插入图片描述

目前版本:2.2.5 GitHub:https://github.com/yuzhiqiang1993/zxing

效果图

scan.gif create.gif

配置
  1. 在 project/build.gradle 中添加 allprojects 如下:
dependencies {
        classpath "com.android.tools.build:gradle:4.1.2"
        classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.0'
    }
---------------------------------------------------------------------
allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}
  1. 在 app/build.gradle 中添加如下:
//Butter Knife
    implementation 'com.jakewharton:butterknife:10.2.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'

    implementation 'com.tbruyelle.rxpermissions2:rxpermissions:+'

    implementation 'com.github.yuzhiqiang1993:zxing:2.2.5'
  1. 申请权限
    
    
    
    
    
    
    
    
使用
  1. activity_main.xml




    

    

    

  1. MainActivity.java
private static final int REQUEST_CODE_SCAN = 1001;

    @BindView(R.id.btn_scan)
    Button mScan;
    @BindView(R.id.btn_create)
    Button mCreate;
    @BindView(R.id.iv_zxing)
    ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        new RxPermissions(this)
                .request(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Boolean aBoolean) {
                        Log.d("amy", "onNext: "+aBoolean);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @OnClick({R.id.btn_scan,R.id.btn_create})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_scan:
                Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
                /*ZxingConfig是配置类  可以设置是否显示底部布局,闪光灯,相册,是否播放提示音  震动等动能
                 * 也可以不传这个参数
                 * 不传的话  默认都为默认不震动  其他都为true
                 * */
                ZxingConfig config = new ZxingConfig();
                config.setPlayBeep(true);//是否播放扫描声音 默认为true
                config.setShake(true);//是否震动  默认为true
                config.setDecodeBarCode(true);//是否扫描条形码 默认为true
                config.setReactColor(R.color.purple_700);//设置扫描框四个角的颜色 默认为白色
                config.setFrameLineColor(R.color.white);//设置扫描框边框颜色 默认无色
                config.setScanLineColor(R.color.teal_200);//设置扫描线的颜色 默认白色
                config.setFullScreenScan(false);//是否全屏扫描  默认为true  设为false则只会在扫描框中扫描
                intent.putExtra(Constant.INTENT_ZXING_CONFIG, config);
                startActivityForResult(intent, REQUEST_CODE_SCAN);
                break;

            case R.id.btn_create:
                try {
                    Bitmap logo = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
                    Bitmap bitmap = CodeCreator.createQRCode("Android开发", 400, 400, null);
                    mImageView.setImageBitmap(bitmap);
                }catch (Exception e) {
                    e.printStackTrace();
                }

                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 扫描二维码/条码回传
        if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {
            if (data != null) {
                String content = data.getStringExtra(Constant.CODED_CONTENT);
//                result.setText("扫描结果为:" + content);
                Toast.makeText(this,content,Toast.LENGTH_SHORT).show();
            }
        }
    }
生成带 logo 的二维码

logo.jpg

  1. 添加 project/build.gradle 依赖:
buildscript {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"
        classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
  1. 添加 app/build.gradle 依赖:
    implementation 'com.jakewharton:butterknife:10.2.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'

    implementation 'com.tbruyelle.rxpermissions2:rxpermissions:+'

    implementation'com.journeyapps:zxing-android-embedded:3.0.2@aar'

    implementation'com.google.zxing:core:3.2.0'
  1. 在清单文件中申请权限:
    
    
    
    
    
    
    
    
    
  1. 工具类 CreatQRCodeImg.java
/**
 * Created on 2021/3/30 16:12
 *
 * @author Gong Youqiang
 */
public class CreatQRCodeImg {
    /**
     * 生成二维码Bitmap
     *
     * @param content   内容
     * @param widthPix  图片宽度
     * @param heightPix 图片高度
     * @param logoBm    二维码中心的Logo图标(可以为null)
     * @return 生成二维码及保存文件是否成功
     */
    public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm,String filePath) {
        try {
            if (content == null || "".equals(content)) {
                return false;
            }

            //配置参数
            Map hints = new HashMap();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
            //容错级别
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
            //设置空白边距的宽度
            //            hints.put(EncodeHintType.MARGIN, 2); //default is 4

            // 图像数据转换,使用了矩阵转换
            BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints);
            int[] pixels = new int[widthPix * heightPix];
            // 下面这里按照二维码的算法,逐个生成二维码的图片,
            // 两个for循环是图片横列扫描的结果
            for (int y = 0; y  reqWidth) {
            final int heightRatio = Math.round((float) height
                    / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);

            inSampleSize = heightRatio             
关注
打赏
1658837700
查看更多评论
0.0728s