XQRCode 一個非常方便實用的二維碼掃描、解析、生成庫

weixin_33935777發表於2018-05-07

XQRCode

一個非常方便實用的二維碼掃描、解析、生成庫

關於我

特點

  • 支援快速整合條形碼、二維碼掃描功能。
  • 支援自定義掃描介面。
  • 支援生成帶圖示的二維碼。
  • 支援生成帶背景圖片的複雜二維碼。
  • 支援二維碼解析功能

1、演示(請star支援)

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.0'
}
複製程式碼

2.2、二維碼掃描

1.預設二維碼掃描介面CaptureActivity

二維碼的掃描結果通過Intent返回出來:

  • XQRCode.RESULT_TYPE:掃描結果型別,XQRCode.RESULT_SUCCESS代表掃描成功,XQRCode.RESULT_FAILED代表掃描失敗。
  • XQRCode.RESULT_DATA:掃描二維碼的資料內容。
/**
 * 開啟二維碼掃描
 */
@Permission(CAMERA)
@IOThread(ThreadType.Single)
private void startScan(boolean isCustom) {
    if (isCustom) {
        openPageForResult(CustomCaptureFragment.class, null, REQUEST_CUSTOM_SCAN);
    } else {
        Intent intent = new Intent(getActivity(), CaptureActivity.class);
        startActivityForResult(intent, REQUEST_CODE);
    }
}

/**
 * 處理二維碼掃描結果
 * @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);
            }
        }
    }
}
複製程式碼

2.自定義二維碼掃描介面

(1)自定義一個掃碼介面佈局。自定義的掃碼介面需要定義一個SurfaceView和一個ViewfinderView,且id必須是preview_viewviewfinder_view。詳情見如下佈局程式碼:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SurfaceView
        android:id="@+id/preview_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <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="10"
        app:inner_height="300dp"
        app:inner_width="300dp" />

</FrameLayout>
複製程式碼

(2)呼叫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();
複製程式碼

(3)最後為CaptureFragment設定二維碼解析回撥介面AnalyzeCallback即可。

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方法,傳入二維碼的絕對路徑即可。

特別感謝

github.com/yipianfengy…

聯絡方式

相關文章