一掃天下——ZXing使用全解析
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
一掃天下——ZXing使用全解析
二維碼現在已經爛App了,不管什麼App,沒有二維碼就好像低人一等了。所以,在自己的專案中整合二維碼功能還是非常有必要的。
網上很多都是基於ZXing2.3的,但是現在都3.1了,改了很多bug,也進行了很多優化,最好按本文弄一下。
參拜ZXing
ZXing的github地址:
https://github.com/zxing/zxing
通過git clone [email protected]:zxing/zxing.git 命令我們可以把整個ZXing專案拉取下來。
然而這並沒有什麼卵用。
因為ZXing的專案是非常龐大的,功能也非常多,但是我們不需要這麼多,我們只關心Android部分的。
獲得ZXing的祝福之jar
在使用ZXing之前,我們需要先編譯它的jar包,我們可以看見原始碼目錄中有一個core的目錄,我們可以把這個資料夾匯入eclipse作為一個java工程。最後通過export匯出一個jar包。
獲得ZXing核心功能
我們需要把核心的掃碼、解碼功能抽取出來,這一步,網上已經有很多人做過了,只是大部分都是基於第一個抽ZXing的人,而那個是基於ZXing1.5、2.3的,所以,記得要進行Update哦。
那麼我們如何獲得最新的ZXing程式碼呢,很簡單,找一箇舊的,然後把最新的程式碼一個個copy過去替換就好了,當然,還是會有一些問題,不過一步步解決就可以了,都不是很大的問題。
飯來張口
這裡為大家也提供一個封裝好的最新的ZXing Lib:
https://github.com/xuyisheng/ZXingLib
基於ZXing3.1封裝,包含了最新的jar包和程式碼。
解析
CaptureActivity
ZXing暴露的呼叫Activity。在handleDecode方法中對掃碼成功後的動作作處理。
ViewfinderView
ZXing掃碼視窗的繪製,原始的ZXing使用這種方式去繪製,在上面提供的開源庫中,作者將掃描框的繪製直接抽取到了XML檔案中,這樣修改起來更加方便了。
CameraConfigurationManager
修改橫豎屏、處理變形效果的核心類。
在public void setDesiredCameraParameters(Camera camera, boolean safeMode)方法中(讀取配置設定相機的對焦模式、閃光燈模式等等),可以將掃描改為豎屏:
即:
在方法最後加上:
/** 設定相機預覽為豎屏 */camera.setDisplayOrientation(90);
- 1
- 2
即可。
在public void initFromCameraParameters(Camera camera)方法中(計算了螢幕解析度和當前最適合的相機畫素),我們可以對修改為豎屏掃碼後,由於畫素資訊點沒有對調造成影象扭曲變形進行修改。
即:
在Log.d(TAG, “Screen resolution: ” + screenResolution);後加上如下的程式碼:
/** 因為換成了豎屏顯示,所以不替換螢幕寬高得出的預覽圖是變形的 */Point screenResolutionForCamera = new Point();screenResolutionForCamera.x = screenResolution.x;screenResolutionForCamera.y = screenResolution.y;if (screenResolution.x < screenResolution.y) { screenResolutionForCamera.x = screenResolution.y; screenResolutionForCamera.y = screenResolution.x;}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
最後,將screenResolution替換為screenResolutionForCamera:
cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);
- 1
- 2
DecodeHandler.decode
ZXing解碼的核心類
CaptureActivityHandler
當DecodeHandler.decode完成解碼後,系統會向CaptureActivityHandler發訊息。如果編碼成功則呼叫CaptureActivity.handleDecode方法對掃描到的結果進行分類處理。
最後
本文的Github中已經包含了前面所提到的所有修改(橫豎屏、扭曲變形),用最新的ZXing程式碼進行了update,同時提供了編碼、解碼方法,並且將掃碼介面抽取成XML(感謝開源作者),方便拓展。
https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib
重要的東西發三遍。
以上。