【QRCodeView】更專注的 Android 二維碼掃描的控制元件
阿新 • • 發佈:2019-02-02
前言
QRCodeView 基於 Google 的 zxing 進行二次開發,簡化二維碼的相關操作、優化識別速度。由於整個 zxing 框架中不僅包含了二維碼識別相關的程式碼,還包括其他格式如條形碼等等的程式碼,體量較大,實際開發中一般只需要使用二維碼,故本專案中刪除了不必要的程式碼。本專案不僅提供了使用攝像頭預覽實時識別二維碼,還有如生成一張二維碼圖片,生成一張帶有 logo 的二維碼圖片等等。
注意:此專案只支援二維碼,不支援其他格式的條碼!
效果圖
整合方式
在 app/build.gradle 中新增依賴:
implementation 'com.github.0xZhangKe:QRCodeView:1.3'
如果依賴失敗還要在根目錄的 builde.gradle 中新增倉庫:
maven { url = 'https://jitpack.io' }
使用方式
使用起來很簡單,先看一下佈局檔案:
<com.zhangke.qrcodeview.QRCodeView
android:id="@+id/qr_code_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:showSlider="true"
app:sliderColor="@android:color/holo_green_dark"
app:showPoint="true"
app:pointColor="@color/colorAccent"
app:frameColor="@android:color/white"/>
再看下 java 程式碼:
package com.zhangke.qrcodeview.sample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.google.zxing.Result;
import com.zhangke.qrcodeview.QRCodeView;
import com.zhangke.qrcodeview.smaple.R;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private QRCodeView qrCodeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
qrCodeView = (QRCodeView) findViewById(R.id.qr_code_view);
qrCodeView.setOnQRCodeListener(new QRCodeView.OnQRCodeRecognitionListener() {
@Override
public void onQRCodeRecognition(Result result) {
Toast.makeText(MainActivity.this, result.getText(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onResume() {
super.onResume();
qrCodeView.startPreview();
}
@Override
protected void onPause() {
qrCodeView.stopPreview();
super.onPause();
}
}
是不是很簡單?就是根據宣告週期初始化一下,設定個回撥就 OK 了,對了別忘記新增許可權:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
類文件
QRCodeViewView
包名:
com.zhangke.qrcodeview
描述:
二維碼預覽 View。
XML attributes:
引數名 | 介紹 |
---|---|
app:facing | 前置或後置攝像頭 |
app:showFrame | 是否顯示邊框,預設顯示 |
app:frameColor | 邊框顏色,預設為白色 |
app:showPoint | 是否繪製二維碼可能出現區域的點,預設不顯示 |
app:pointColor | 點的顏色,預設為紅色 |
app:showSlider | 是否開啟掃描動畫,預設顯示 |
app:sliderColor | 掃描條的顏色,預設綠色 |
Public constructors
public QRCodeView(Context context)
public QRCodeView(Context context, AttributeSet attrs)
public QRCodeView(Context context, AttributeSet attrs, int defStyleAttr)
Public methods
name | describe |
---|---|
void startPreview() | 開始預覽,一般在 onResume() 中呼叫 |
void stopPreview() | 停止預覽,一般在 onPause() 中呼叫 |
boolean isPreview() | 當前是否正在預覽 |
Camera getCamera() | 獲取 Camera 物件 |
void setOnQRCodeListener(OnQRCodeRecognitionListener onQRCodeListener) | 設定二維碼識別監聽器 |
OnQRCodeRecognitionListener
包名:
com.zhangke.qrcodeview.QRCodeViewView
描述:
二維碼識別監聽器
name | describe |
---|---|
void onQRCodeRecognition(Result result) | 識別到二維碼時會回撥此方法 |
QRCodeUtil
包名:
com.zhangke.qrcodeview
描述:
二維碼相關工具類。
name | describe |
---|---|
static Bitmap createQRCode(String text) throws WriterException | 根據文字建立二維碼圖片 |
static Bitmap createQRCode(String text, Bitmap logo) | 根據文字及 logo 建立一個帶有 logo 的二維碼圖片 |
static String decodeQRCode(Bitmap bitmap) | 識別一張二維碼圖片,返回其中的文字 |