天天看點

BGAQRCode-Android 多樣式掃描二維碼

下載下傳連結:https://download.csdn.net/download/sinat_28238111/10502468

目錄

  • 功能介紹
  • 常見問題
  • 效果圖與示例 apk
  • Gradle 依賴
  • 布局檔案
  • 自定義屬性說明
  • 接口說明
  • 關于我

功能介紹

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

  •  可定制各式各樣的掃描框
  •  可定制全屏掃描或隻識别掃描框區域内碼
  •  可定制要識别的碼的格式(詳細用法檢視 TestScanActivity 中的 onClick 方法)
  •  可以控制閃光燈,友善夜間使用
  •  可以設定用前置攝像頭掃描
  •  ZXing 生成可自定義顔色、帶 logo 的二維碼
  •  ZXing 生成一維碼
  •  ZXing 掃描條碼、二維碼
  •  ZXing 識别圖庫中的條碼、二維碼圖檔
  •  ZBar 掃描條碼、二維碼「已解決中文亂碼問題」
  •  ZBar 識别圖庫中的條碼、二維碼圖檔

常見問題

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

使用的時候将 Toolbar 或者其他 View 蓋在 ZBarView 或者 ZXingView 的上面,讓 ZBarView 或者 ZXingView 填充螢幕寬高。ZXing 布局檔案參考 ZBar 布局檔案參考

2.出現黑屏

在自己項目裡內建時記得在 onDestroy 方法中調用 mQRCodeView.onDestroy(),在 onStop 方法中調用 mQRCodeView.stopCamera(),否則會出現黑屏。如果沒執行前面提到的這兩個方法出現黑屏的話,那你就隻能加上前面提到的兩個方法後,重新開機手機後重新運作了

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

BGAQRCode-Android 多樣式掃描二維碼

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

效果圖與示例 apk

BGAQRCode-Android 多樣式掃描二維碼
BGAQRCode-Android 多樣式掃描二維碼
BGAQRCode-Android 多樣式掃描二維碼
BGAQRCode-Android 多樣式掃描二維碼
BGAQRCode-Android 多樣式掃描二維碼
點選下載下傳 ZXingDemo.apk或掃描下面的二維碼安裝 點選下載下傳 ZBarDemo.apk或掃描下面的二維碼安裝
BGAQRCode-Android 多樣式掃描二維碼
BGAQRCode-Android 多樣式掃描二維碼

Gradle 依賴

BGAQRCode-Android 多樣式掃描二維碼

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

ZXing
dependencies {
    implementation 'cn.bingoogolapple:bga-qrcode-zxing:latestVersion'
}      
ZBar
dependencies {
    implementation 'cn.bingoogolapple:bga-qrcode-zbar:latestVersion'
}      

布局檔案

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_cornerDisplayType 掃描框邊角線顯示位置(相對于邊框),預設值為中間 center
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(已廢棄,如果要垂直居中用 qrcv_verticalBias="0.5"來代替) 掃描框是否垂直居中,該屬性為true時會忽略 qrcv_topOffset 屬性 false
qrcv_verticalBias 掃描框中心點在螢幕垂直方向的比例,當設定此值時,會忽略 qrcv_topOffset 屬性 -1
qrcv_toolbarHeight Toolbar 的高度,通過該屬性來修正由 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
qrcv_isShowLocationPoint 是否顯示定位點 false

接口說明

QRCodeView
/**
 * ZBarView 設定識别的格式。詳細用法請看 zbardemo 的 TestScanActivity 中的 onClick 方法
 *
 * @param barcodeType 識别的格式
 * @param formatList  barcodeType 為 BarcdeType.CUSTOM 時,必須指定該值
 */
public void setType(BarcodeType barcodeType, List<BarcodeFormat> formatList)

/**
 * ZXingView 設定識别的格式。詳細用法請看 zxingdemo TestScanActivity 中的 onClick 方法
 *
 * @param barcodeType 識别的格式
 * @param hintMap     barcodeType 為 BarcodeType.CUSTOM 時,必須指定該值
 */
public void setType(BarcodeType barcodeType, Map<DecodeHintType, Object> hintMap)

/**
 * 設定掃描二維碼的代理
 *
 * @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()

/**
 * 延遲0.5秒後開始識别
 */
public void startSpot()

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

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

/**
 * 停止識别,并且隐藏掃描框
 */
public void stopSpotAndHiddenRect()

/**
 * 顯示掃描框,并且延遲0.5秒後開始識别
 */
public void startSpotAndShowRect()

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

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

/**
 * 解析本地圖檔二維碼。傳回二維碼圖檔裡的内容 或 null
 *
 * @param picturePath 要解析的二維碼圖檔本地路徑
 */
public void decodeQRCode(String picturePath)

/**
 * 解析 Bitmap 二維碼。傳回二維碼圖檔裡的内容 或 null
 *
 * @param bitmap 要解析的二維碼圖檔
 */
public void decodeQRCode(Bitmap bitmap)      
QRCodeView.Delegate 掃描二維碼的代理
/**
 * 處理掃描結果
 *
 * @param result 攝像頭掃碼時隻要回調了該方法 result 就一定有值,不會為 null。解析本地圖檔或 Bitmap 時 result 可能為 null
 */
void onScanQRCodeSuccess(String result)

/**
 * 處理打開相機出錯
 */
void onScanQRCodeOpenCameraError()      
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)

/**
 * 同步建立條形碼圖檔
 *
 * @param content  要生成條形碼包含的内容
 * @param width    條形碼的寬度,機關px
 * @param height   條形碼的高度,機關px
 * @param textSize 字型大小,機關px,如果等于0則不在底部繪制文字
 */
public static Bitmap syncEncodeBarcode(String content, int width, int height, int textSize)      

繼續閱讀