QRCode 掃描二維碼、掃描條形碼、相簿獲取圖片後識別、生成帶 Logo 二維碼、支援微博微信 QQ 二維碼掃描樣式
阿新 • • 發佈:2019-01-05
目錄
功能介紹
根據之前公司的產品需求,參考 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
「latestVersion」指的是左邊這個 maven-central 徽章後面的「數字」,請自行替換。請不要再來問我「latestVersion」是什麼了
效果圖與示例 apk
Gradle 依賴
「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_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 |
介面說明
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)