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