Zxing二維碼掃描和那些坑

Google的zxing來實(shí)現(xiàn)二維碼掃描我相信很多人都用過等龙。但是實(shí)現(xiàn)的過程遇到了很多的坑处渣,也是因?yàn)檫@些坑在網(wǎng)上沒有具體的解決方案伶贰,今天就把我的實(shí)現(xiàn)過程分享給大家。

我會(huì)分為兩步來和大家分享:

(1)項(xiàng)目中如何集成zxing

(2)如何修改取景框的樣式

(3)總結(jié)填坑

1.項(xiàng)目中集成zxing

在項(xiàng)目中集成zxing霍比,網(wǎng)上有很多的教程也說的比較詳細(xì)了幕袱,zxing中的內(nèi)容很多暴备,涵蓋了很多的掃碼功能(不僅僅局限于掃描二維碼...)悠瞬。步驟很簡(jiǎn)單,只需要我們將幾個(gè)核心的類包涯捻,拷貝到你的項(xiàng)目中浅妆,然后添加zxing.jar即可。沒有zxing.jar的童靴點(diǎn)擊下載障癌。

↑ ?以上就是幾個(gè)我們需要用到的核心類凌外。


↑ ?然后在color.xml中添加以上顏色值。


↑ ?在ids.xml中添加以上id屬性值涛浙。



↑ 在string.xml中添加顯示的提示字符康辑。可自己隨意修改轿亮。

在zxing中疮薇,掃描的界面即Activity已經(jīng)幫我們寫好了。在activity包下:

所以我注,我們啟動(dòng)掃描二維碼的頁面就有了以下代碼:

很簡(jiǎn)單按咒,就是啟動(dòng)該Activity。細(xì)心的童靴此處注意到了我們使用的是startActivityForResult但骨。沒過励七,因?yàn)楫?dāng)我們掃描完畢后需要得到最終的掃描結(jié)果,ok奔缠。順理成章的我們需要重寫onActivityResult方法來獲取結(jié)果掠抬。

有童靴看到上面的代碼可能會(huì)有疑問了,你怎么知道要根據(jù) "result"這個(gè)key來取值呢校哎?ok两波,我們來看CaptureActivity這類,全局搜索該類finish的地方贬蛙,發(fā)現(xiàn)如下代碼:


從上面代碼中雨女,我們發(fā)現(xiàn),CaptureActivity是在handleDecode的方法中去傳回值并且finish的阳准。相信你已經(jīng)看到了氛堕,沒錯(cuò),在put的地方野蝇,key就是我們之前所說的result讼稚。ok括儒,解決。

此時(shí)锐想,編譯啟動(dòng)帮寻,你就可以看到一個(gè)簡(jiǎn)單的掃描界面了。

2.如何修取景框的樣式

啟動(dòng)后赠摇,你是不是玩的很爽固逗。感慨Google改變了我們的生活,讓任何事情變得可能藕帜。哈哈烫罩,扯淡兩句 。此時(shí)洽故,有些童靴會(huì)說贝攒,這取景框(掃描框)跟我的App的主題不太符合呀!確實(shí)时甚,Google自帶效果肯定沒有那么多樣式隘弊。那么就需要我們自己來定義,制作出更加精美和符合自己App主題的效果荒适。定義該效果需要用到下面這個(gè)類:

沒錯(cuò)梨熙,就是ViewfinderView。打開這個(gè)類:

public final classViewfinderViewextendsView

可以看到該類繼承自View吻贿。所以串结,顧名思義,我們繪制肯定是在onDraw方法中了舅列。ok肌割,直接定位到onDraw方法,剩下的就是你自己發(fā)揮想象力帐要,去定制啦0殉ā(比如:四個(gè)角,掃描線榨惠,等等奋早。。)

3.填坑

本篇文章在開始的時(shí)候赠橙,我就說了坑坑坑耽装!所以,單憑以上2個(gè)部分是滿足不了大家的期揪,那么掉奄,我們下面來看幾個(gè)問題:

(1)你是否遇到了,取景框太小凤薛,以至于離二維碼很遠(yuǎn)才可以掃到姓建?

(2)取景框?qū)?zhǔn)二維碼诞仓,二維碼拉伸變形了,根本掃不出結(jié)果來速兔!

好墅拭,針對(duì)以上問題,我們來逐一解決涣狗!

首先來看第一個(gè)問題谍婉,Google考慮到這個(gè)問題,所以zxing中提供了修改取景框大小的地方:

在camera包下的CameraManager類中屑柔,打開該類屡萤,我們看到:


沒錯(cuò)珍剑,這幾個(gè)值就是更改取景框大小的常量掸宛。

此時(shí),你改變值發(fā)現(xiàn)效果也不是很多招拙,那下面這種方案將完美解決你的問題:

找到該類中的getFrameingRect方法:

將原本計(jì)算height和width的代碼注釋唧瘾,添加以下代碼:


ok,運(yùn)行程序别凤,完美解決饰序。并且加快的掃描的速度(掃描速度取決于取景框的大小)规哪!

填了第一個(gè)坑求豫,我們來填第二個(gè):

針對(duì)于掃描時(shí),二維碼拉伸變形的問題诉稍,是因?yàn)閦xing默認(rèn)是針對(duì)橫屏掃描的蝠嘉,所以,我們只需要改變x,y的計(jì)算杯巨,即橫縱軸即可蚤告。此時(shí),我們需要找到CameraConfigurationManager類:

找到findBestPreviewSizeValue方法:

將newDiff的變量計(jì)算代碼改成如下:


即調(diào)換位置即可服爷。

ok杜恰,到此為止,關(guān)于zxing的集成使用就已經(jīng)完美解決了仍源。有問題的童靴歡迎給我留言心褐,我將盡快回復(fù)!

:最近有朋友說近距離掃描二維碼掃描不出笼踩,需要遠(yuǎn)一點(diǎn)才可以逗爹。那么解決這個(gè)問題的方案如下:

找到CameraConfigurationManager類的setDesiredCameraParameters(Camera camera)方法,將其中的代碼注釋戳表,然后添加如下代碼:






原文網(wǎng)址:原文網(wǎng)址鏈接


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桶至,一起剝皮案震驚了整個(gè)濱河市昼伴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌镣屹,老刑警劉巖圃郊,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異女蜈,居然都是意外死亡持舆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門伪窖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逸寓,“玉大人,你說我怎么就攤上這事覆山≈裆欤” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵簇宽,是天一觀的道長(zhǎng)勋篓。 經(jīng)常有香客問我,道長(zhǎng)魏割,這世上最難降的妖魔是什么譬嚣? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮钞它,結(jié)果婚禮上拜银,老公的妹妹穿的比我還像新娘。我一直安慰自己遭垛,他們只是感情好尼桶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耻卡,像睡著了一般疯汁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卵酪,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天幌蚊,我揣著相機(jī)與錄音,去河邊找鬼溃卡。 笑死溢豆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘸羡。 我是一名探鬼主播漩仙,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了队他?” 一聲冷哼從身側(cè)響起卷仑,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麸折,沒想到半個(gè)月后锡凝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垢啼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年窜锯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芭析。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锚扎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出馁启,到底是詐尸還是另有隱情驾孔,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布进统,位于F島的核電站助币,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏螟碎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一迹栓、第九天 我趴在偏房一處隱蔽的房頂上張望掉分。 院中可真熱鬧,春花似錦克伊、人聲如沸酥郭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽不从。三九已至,卻和暖如春犁跪,著一層夾襖步出監(jiān)牢的瞬間椿息,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工坷衍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寝优,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓枫耳,卻偏偏與公主長(zhǎng)得像乏矾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容