1. 程式人生 > >【QRCodeView】更專注的 Android 二維碼掃描的控制元件

【QRCodeView】更專注的 Android 二維碼掃描的控制元件

前言

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) 識別一張二維碼圖片,返回其中的文字