一掃天下——ZXing使用全解析
二維碼如今已經爛App了,無論什么App。沒有二維碼就好像低人一等了。
所以,在自己的項目中集成二維碼功能還是非常有必要的。
網上非常多都是基於ZXing2.3的。可是如今都3.1了,改了非常多bug,也進行了非常多優化。最好按本文弄一下。
參拜ZXing
ZXing的github地址:
https://github.com/zxing/zxing
通過git clone git@github.com:zxing/zxing.git 命令我們能夠把整個ZXing項目拉取下來。
然而這並沒有什么卵用。
由於ZXing的項目是非常龐大的。功能也非常多。可是我們不須要這么多,我們僅僅關心Android部分的。
獲得ZXing的祝福之jar
在使用ZXing之前。我們須要先編譯它的jar包,我們能夠看見源碼文件夾中有一個core的文件夾,我們能夠把這個文件夾導入eclipse作為一個javaproject。
最后通過export導出一個jar包。
獲得ZXing核心功能
我們須要把核心的掃碼、解碼功能抽取出來。這一步。網上已經有非常多人做過了。僅僅是大部分都是基於第一個抽ZXing的人,而那個是基於ZXing1.5、2.3的,所以。記得要進行Update哦。
那么我們怎樣獲得最新的ZXing代碼呢,非常easy,找一個舊的。然后把最新的代碼一個個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);
就可以。
在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;
}
最后,將screenResolution替換為screenResolutionForCamera:
cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);
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
重要的東西發三遍。
以上。