XQRCode

by xuexiangjys

xuexiangjys /XQRCode

一个非常方便实用的二维码扫描、解析、生成库

132 Stars 23 Forks Last release: about 1 year ago (1.0.6) 49 Commits 7 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

XQRCode

api I Star

一个非常方便实用的二维码扫描、解析、生成库

关于我

github csdn

特点

  • 支持快速集成条形码、二维码扫描功能。
  • 支持自定义扫描界面。
  • 支持二维码多次扫描。
  • 支持生成带图标的二维码。
  • 支持生成带背景图片的复杂二维码。
  • 支持二维码解析功能

1、演示(请star支持)

Demo下载

downloads

2、如何使用

目前支持主流开发工具AndroidStudio的使用,直接配置build.gradle,增加依赖即可.

2.1、Android Studio导入方法,添加Gradle依赖

1.先在项目根目录的 build.gradle 的 repositories 添加:

allprojects {
     repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

2.然后在dependencies添加:

dependencies {
  ...
  implementation 'com.github.xuexiangjys:XQRCode:1.0.6'
}

2.2、二维码扫描

默认二维码扫描

1.默认二维码扫描界面

CaptureActivity

使用

XQRCode.startScan
直接调取默认二维码扫描。
XQRCode.startScan(this, REQUEST_CODE);

2.二维码的扫描结果通过Intent返回出来:

  • XQRCode.RESULT_TYPE
    :扫描结果类型,
    XQRCode.RESULT_SUCCESS
    代表扫描成功,
    XQRCode.RESULT_FAILED
    代表扫描失败。
  • XQRCode.RESULT_DATA
    :扫描二维码的数据内容。

3.自定义默认二维码扫描界面的主题样式:


4.自定义默认二维码扫描界面的界面样式,重写相关方法:

详细内容可参见CustomCaptureActivity

@Override
protected void beforeCapture() {
//做二维码采集之前需要做的事情
}

@Override protected void onCameraInitSuccess() { //相机初始化成功 }

@Override protected void onCameraInitFailed() { //相机初始化失败 }

下面的二维码扫描代码仅供参考:

/**
 * 开启二维码扫描
 */
@Permission(CAMERA)
private void startScan(ScanType scanType) {
    switch (scanType) {
        case DEFAULT:
            XQRCode.startScan(this, REQUEST_CODE);
            break;
        case DEFAULT_Custom:
            XQRCode.startScan(this, REQUEST_CODE, R.style.XQRCodeTheme_Custom);
            break;
        case REMOTE:
            Intent intent = new Intent(XQRCode.ACTION_DEFAULT_CAPTURE);
            startActivityForResult(intent, REQUEST_CODE);
            break;
        default:
            break;
    }
}

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //处理二维码扫描结果 if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { //处理扫描结果(在界面上显示) handleScanResult(data); }

//选择系统图片并解析
else if (requestCode == REQUEST_IMAGE) {
    if (data != null) {
        Uri uri = data.getData();
        getAnalyzeQRCodeResult(uri);
    }
}

}

/**

  • 处理二维码扫描结果
  • @param data
  • / private void handleScanResult(Intent data) { if (data != null) {
      Bundle bundle = data.getExtras();
      if (bundle != null) {
          if (bundle.getInt(XQRCode.RESULT_TYPE) == XQRCode.RESULT_SUCCESS) {
              String result = bundle.getString(XQRCode.RESULT_DATA);
              ToastUtils.toast("解析结果:" + result, Toast.LENGTH_LONG);
          } else if (bundle.getInt(XQRCode.RESULT_TYPE) == XQRCode.RESULT_FAILED) {
              ToastUtils.toast("解析二维码失败", Toast.LENGTH_LONG);
          }
      }
    } }

/**

  • 进行二维码解析

  • @param uri

  • / private void getAnalyzeQRCodeResult(Uri uri) { XQRCode.analyzeQRCode(PathUtils.getFilePathByUri(getContext(), uri), new QRCodeAnalyzeUtils.AnalyzeCallback() {

      @Override
      public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
          ToastUtils.toast("解析结果:" + result, Toast.LENGTH_LONG);
      }
    
      @Override
      public void onAnalyzeFailed() {
          ToastUtils.toast("解析二维码失败", Toast.LENGTH_LONG);
      }

    }); }

自定义二维码扫描

  1. 自定义一个扫码界面布局。自定义的扫码界面需要定义一个
    SurfaceView
    和一个
    ViewfinderView
    ,且id必须是
    preview_view
    viewfinder_view
    。详情见如下布局代码:
<surfaceview android:id="@+id/preview_view" android:layout_width="wrap_content" android:layout_height="wrap_content"></surfaceview>

<com.xuexiang.xqrcode.view.viewfinderview android:id="@+id/viewfinder_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:inner_corner_color="@color/scan_corner_color" app:inner_corner_length="30dp" app:inner_corner_width="5dp" app:inner_margintop="120dp" app:inner_scan_bitmap="@mipmap/ic_scan_image" app:inner_scan_iscircle="false" app:inner_scan_speed="10dp" app:inner_height="300dp" app:inner_width="300dp"></com.xuexiang.xqrcode.view.viewfinderview>

ViewfinderView属性表

属性名

类型 默认值 备注
innerwidth dimension 屏幕宽度的3/4 扫描框的宽度
innerheight dimension 屏幕宽度的3/4 扫描框的高度
innermarginTop dimension 居中效果 扫描框距离顶部的距离
innercornercolor color #0DC2FE 扫描框四角的颜色
innercornerlength dimension 32dp 扫描框四角的长度
innercornerwidth dimension 6dp 扫描框四角的宽度
innerscanbitmap reference R.drawable.xqrcodeicscanlight 扫描控件图资源
innerscanbitmaptint color / 扫描控件图资源的色调
innerscanspeed dimension 5dp 扫描速度
innerscananimationinterval integer 25 扫描动画绘制的间期,单位是ms
innerscanisCircle boolean true 小圆点是否展示

  1. 调用
    XQRCode.getCaptureFragment
    的方法,传入自定义扫描界面的布局ID,可以获得带扫描功能的Fragment-
    CaptureFragment
    ,将其填充到页面中。
// 为二维码扫描界面设置定制化界面
CaptureFragment captureFragment = XQRCode.getCaptureFragment(R.layout.layout_custom_camera);
captureFragment.setAnalyzeCallback(analyzeCallback);
getChildFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();
  1. 最后为CaptureFragment设置二维码解析回调接口
    AnalyzeCallback
    即可。

设置相机聚焦的间隔

//设置相机的自动聚焦间隔
XQRCode.setAutoFocusInterval(1500L);

2.3、二维码生成

1.简单的二维码生成

调用

XQRCode.createQRCodeWithLogo
,传入二维码携带的内容、尺寸、图标即可生成二维码Bitmap。

2.复杂的二维码生成

调用

XQRCode.newQRCodeBuilder
可以获得二维码生成构建者。可设置的参数如下:
  • setContents: 设置二维码携带的内容
  • setSize: 设置二维码的尺寸
  • setMargin: 设置二维码的边缘宽度
  • setDataDotScale: 设置二维码的数据点缩放比例
  • setColorDark: 设置深色点(true-dots)色值
  • setColorLight: 设置浅色点(false-dots)色值
  • setBackgroundImage: 设置背景图案
  • setWhiteMargin: 设置是否是白色的边缘
  • setAutoColor: 设置是否自动从背景图案中选取色值
  • setBinarize: 设置是否(二值化)灰度化背景图案
  • setBinarizeThreshold: 设置二值化中值

最后调用

build
方法即可生成二维码。

2.4、二维码解析

1.只需要解析二维码携带的数据内容,可直接调用

XQRCode.analyzeQRCode
方法,传入二维码的绝对路径即可。

2.如果需要完整的二维码解析结果,可调用

XQRCode.getAnalyzeQRCodeResult
方法,传入二维码的绝对路径即可。

混淆配置

-dontwarn com.google.zxing.**
-keep class com.google.zxing.**{*;}

特别感谢

https://github.com/yipianfengye/android-zxingLibrary

联系方式

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.