1. 程式人生 > >QRCode 掃描二維碼、掃描條形碼、相簿獲取圖片後識別、生成帶 Logo 二維碼、支援微博微信 QQ 二維碼掃描樣式

QRCode 掃描二維碼、掃描條形碼、相簿獲取圖片後識別、生成帶 Logo 二維碼、支援微博微信 QQ 二維碼掃描樣式

目錄

功能介紹

根據之前公司的產品需求,參考 barcodescanner 改的,希望能幫助到有生成二維碼、掃描二維碼、識別圖片二維碼等需求的猿友。修改幅度較大,也就沒準備針對 barcodescanner 庫提交PR。

  •  ZXing 生成可自定義顏色、帶 logo 的二維碼
  •  ZXing 掃描二維碼
  •  ZXing 識別相簿中的二維碼圖片
  •  可以設定用前置攝像頭掃描
  •  可以控制閃光燈,方便夜間使用
  •  可以定製各式各樣的掃描框
  •  可定製全屏掃描或只識別掃描框區域內的二維碼
  •  ZBar 掃描二維碼「掃描中文會有亂碼,如果對中文有要求,請使用 ZXing」

常見問題

1.部分手機無法掃描出結果,掃描預覽介面二維碼被壓縮

使用的時候將 Toolbar 或者其他 View 蓋在 ZBarView 或者 ZXingView 的上面,讓 ZBarView 或者 ZXingView 填充螢幕寬高。

ZXing 佈局檔案參考 ZBar 佈局檔案參考

2.Gradle 依賴時提示找不到cn.bingoogolapple:bga-libraryname:「latestVersion」@aar

Maven Central 「latestVersion」指的是左邊這個 maven-central 徽章後面的「數字」,請自行替換。請不要再來問我「latestVersion」是什麼了

效果圖與示例 apk

zbar109 zxingbarcode109 zxingdecode109 zxingqrcode109 iqegg

Gradle 依賴

Maven Central 「latestVersion」指的是左邊這個 maven-central 徽章後面的「數字」,請自行替換。

ZXing

dependencies {
    compile 'com.google.zxing:core:3.2.1'
compile 'cn.bingoogolapple:bga-qrcodecore:[email protected]' compile 'cn.bingoogolapple:bga-zxing:[email protected]' }

ZBar

dependencies {
    compile 'cn.bingoogolapple:bga-qrcodecore:[email protected]'
    compile 'cn.bingoogolapple:bga-zbar:[email protected]'
}

佈局檔案

ZXing

<cn
.bingoogolapple.qrcode.zxing.ZXingView android:id="@+id/zxingview" style="@style/MatchMatch" app:qrcv_animTime="1000" app:qrcv_borderColor="@android:color/white" app:qrcv_borderSize="1dp" app:qrcv_cornerColor="@color/colorPrimaryDark" app:qrcv_cornerLength="20dp" app:qrcv_cornerSize="3dp" app:qrcv_maskColor="#33FFFFFF" app:qrcv_rectWidth="200dp" app:qrcv_scanLineColor="@color/colorPrimaryDark" app:qrcv_scanLineSize="1dp" app:qrcv_topOffset="90dp" />

ZBar

<cn.bingoogolapple.qrcode.zbar.ZBarView
    android:id="@+id/zbarview"
    style="@style/MatchMatch"
    app:qrcv_animTime="1000"
    app:qrcv_borderColor="@android:color/white"
    app:qrcv_borderSize="1dp"
    app:qrcv_cornerColor="@color/colorPrimaryDark"
    app:qrcv_cornerLength="20dp"
    app:qrcv_cornerSize="3dp"
    app:qrcv_isShowDefaultScanLineDrawable="true"
    app:qrcv_maskColor="#33FFFFFF"
    app:qrcv_rectWidth="200dp"
    app:qrcv_scanLineColor="@color/colorPrimaryDark"
    app:qrcv_topOffset="90dp" />

自定義屬性說明

屬性名說明預設值
qrcv_topOffset掃描框距離 toolbar 底部的距離90dp
qrcv_cornerSize掃描框邊角線的寬度3dp
qrcv_cornerLength掃描框邊角線的長度20dp
qrcv_cornerColor掃描框邊角線的顏色@android:color/white
qrcv_rectWidth掃描框的寬度200dp
qrcv_barcodeRectHeight條碼掃樣式描框的高度140dp
qrcv_maskColor除去掃描框,其餘部分陰影顏色#33FFFFFF
qrcv_scanLineSize掃描線的寬度1dp
qrcv_scanLineColor掃描線的顏色「掃描線和預設的掃描線圖片的顏色」@android:color/white
qrcv_scanLineMargin掃描線距離上下或者左右邊框的間距0dp
qrcv_isShowDefaultScanLineDrawable是否顯示預設的圖片掃描線「設定該屬性後 qrcv_scanLineSize 將失效,可以通過 qrcv_scanLineColor 設定掃描線的顏色,避免讓你公司的UI單獨給你出特定顏色的掃描線圖片」false
qrcv_customScanLineDrawable掃描線的圖片資源「預設的掃描線圖片樣式不能滿足你的需求時使用,設定該屬性後 qrcv_isShowDefaultScanLineDrawable、qrcv_scanLineSize、qrcv_scanLineColor 將失效」null
qrcv_borderSize掃描邊框的寬度1dp
qrcv_borderColor掃描邊框的顏色@android:color/white
qrcv_animTime掃描線從頂部移動到底部的動畫時間「單位為毫秒」1000
qrcv_isCenterVertical掃描框是否垂直居中,該屬性為true時會忽略 qrcv_topOffset 屬性false
qrcv_toolbarHeightToolbar 的高度,通過該屬性來修正由 Toolbar 導致掃描框在垂直方向上的偏差0dp
qrcv_isBarcode是否是掃條形碼false
qrcv_tipText提示文案null
qrcv_tipTextSize提示文案字型大小14sp
qrcv_tipTextColor提示文案顏色@android:color/white
qrcv_isTipTextBelowRect提示文案是否在掃描框的底部false
qrcv_tipTextMargin提示文案與掃描框之間的間距20dp
qrcv_isShowTipTextAsSingleLine是否把提示文案作為單行顯示false
qrcv_isShowTipBackground是否顯示提示文案的背景false
qrcv_tipBackgroundColor提示文案的背景色#22000000
qrcv_isScanLineReverse掃描線是否來回移動true
qrcv_isShowDefaultGridScanLineDrawable是否顯示預設的網格圖片掃描線false
qrcv_customGridScanLineDrawable掃描線的網格圖片資源nulll
qrcv_isOnlyDecodeScanBoxArea是否只識別掃描框區域的二維碼false

介面說明

QRCodeView

/**
 * 設定掃描二維碼的代理
 *
 * @param delegate 掃描二維碼的代理
 */
public void setDelegate(Delegate delegate)

/**
 * 顯示掃描框
 */
public void showScanRect()

/**
 * 隱藏掃描框
 */
public void hiddenScanRect()

/**
 * 開啟後置攝像頭開始預覽,但是並未開始識別
 */
public void startCamera()

/**
 * 開啟指定攝像頭開始預覽,但是並未開始識別
 *
 * @param cameraFacing  Camera.CameraInfo.CAMERA_FACING_BACK or Camera.CameraInfo.CAMERA_FACING_FRONT
 */
public void startCamera(int cameraFacing)

/**
 * 關閉攝像頭預覽,並且隱藏掃描框
 */
public void stopCamera()

/**
 * 延遲1.5秒後開始識別
 */
public void startSpot()

/**
 * 延遲delay毫秒後開始識別
 *
 * @param delay
 */
public void startSpotDelay(int delay)

/**
 * 停止識別
 */
public void stopSpot()

/**
 * 停止識別,並且隱藏掃描框
 */
public void stopSpotAndHiddenRect()

/**
 * 顯示掃描框,並且延遲1.5秒後開始識別
 */
public void startSpotAndShowRect()

/**
 * 開啟閃光燈
 */
public void openFlashlight()

/**
 * 關閉散光燈
 */
public void closeFlashlight()

QRCodeView.Delegate 掃描二維碼的代理

/**
 * 處理掃描結果
 *
 * @param result
 */
void onScanQRCodeSuccess(String result)

/**
 * 處理開啟相機出錯
 */
void onScanQRCodeOpenCameraError()

QRCodeDecoder 解析二維碼圖片。幾個過載方法都是耗時操作,請在子執行緒中呼叫。

/**
 * 同步解析本地圖片二維碼。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param picturePath 要解析的二維碼圖片本地路徑
 * @return 返回二維碼圖片裡的內容 或 null
 */
public static String syncDecodeQRCode(String picturePath)

/**
 * 同步解析bitmap二維碼。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param bitmap 要解析的二維碼圖片
 * @return 返回二維碼圖片裡的內容 或 null
 */
public static String syncDecodeQRCode(Bitmap bitmap)

QRCodeEncoder 建立二維碼圖片。幾個過載方法都是耗時操作,請在子執行緒中呼叫。

/**
 * 同步建立黑色前景色、白色背景色的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content 要生成的二維碼圖片內容
 * @param size    圖片寬高,單位為px
 */
public static Bitmap syncEncodeQRCode(String content, int size)

/**
 * 同步建立指定前景色、白色背景色的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content         要生成的二維碼圖片內容
 * @param size            圖片寬高,單位為px
 * @param foregroundColor 二維碼圖片的前景色
 */
public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor)

/**
 * 同步建立指定前景色、白色背景色、帶logo的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content         要生成的二維碼圖片內容
 * @param size            圖片寬高,單位為px
 * @param foregroundColor 二維碼圖片的前景色
 * @param logo            二維碼圖片的logo
 */
public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, Bitmap logo)

/**
 * 同步建立指定前景色、指定背景色、帶logo的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content         要生成的二維碼圖片內容
 * @param size            圖片寬高,單位為px
 * @param foregroundColor 二維碼圖片的前景色
 * @param backgroundColor 二維碼圖片的背景色
 * @param logo            二維碼圖片的logo
 */
public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, int backgroundColor, Bitmap logo)