下載下傳連結: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」
「latestVersion」指的是左邊這個 Download 徽章後面的「數字」,請自行替換。請不要再來問我「latestVersion」是什麼了
效果圖與示例 apk
點選下載下傳 ZXingDemo.apk或掃描下面的二維碼安裝 | 點選下載下傳 ZBarDemo.apk或掃描下面的二維碼安裝 |
---|---|
Gradle 依賴
「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)