將zxing掃碼界面改為豎屏的問題

1.? ?功能概述

默認的ZXing Demo提供的是橫屏掃描没佑,不符合現在市場的流行趨勢和用戶的使用習慣滨攻,然而在修改界面為豎屏的過程中,我們發(fā)現zxing無法讀取條形碼數據(二維碼可以正常讀刃铩)真竖。修改布局的過程不再贅述。

2.? 修改說明

1) 在AndroidManifest.xml中详幽,把Activity的屬性的screenOrientation設置為"portrait"筛欢。在開發(fā)android的應用中,有時候需要限制橫豎屏切換唇聘。只需要在AndroidManifest.xml文件中加入android:screenOrientation屬性限制版姑。其中android:screenOrientation="portrait"是限制此頁面豎屏顯示。

2) 在CameraManager.java文件中迟郎,修改預覽縮放剥险。主要根據長寬比對預覽效果進行了分類。如果不需要橫屏了宪肖,可以直接取豎屏的設置表制。主要代碼如下:

rect.left = framingRect.left * cameraResolution.x / screenResolution.x;

rect.right = framingRect.right * cameraResolution.x / screenResolution.x;

rect.top = framingRect.top * cameraResolution.y / screenResolution.y;

rect.bottom = framingRect.bottom * cameraResolution.y / screenResolution.y;

改為:

?// 下面為豎屏模式

if (screenResolution.x < screenResolution.y) {

????rect.left = framingRect.left * cameraResolution.y / screenResolution.x;

????rect.right = framingRect.right * cameraResolution.y / screenResolution.x;

????rect.top = framingRect.top * cameraResolution.x / screenResolution.y;

????rect.bottom = framingRect.bottom * cameraResolution.x / screenResolution.y;

} else {

????// 下面為橫屏模式?

????rect.left = framingRect.left * cameraResolution.x / screenResolution.x;

????rect.right = framingRect.right * cameraResolution.x / screenResolution.x;

????rect.top = framingRect.top * cameraResolution.y / screenResolution.y;

????rect.bottom = framingRect.bottom * cameraResolution.y / screenResolution.y;

}

3) 在CameraManager.java文件中,修改解析函數?buildLuminanceSource(),這是本次修改的核心控乾,因為默認的條形碼解析是橫屏的么介,在本次修改中,我們根據豎屏條件做了一些針對性的處理,主要功能是將獲得數據的寬和高置換蜕衡,使其適應豎屏環(huán)境壤短。核心代碼如下:

public PlanarYUVLuminanceSource buildLuminanceSource(byte[] data, int width, int height) {

? ? ? ? Rect rect = getFramingRectInPreview();

? ? ? ? if (rect == null) {

? ? ? ? ? ? return null;

? ? ? ? }

? ? ? ?PlanarYUVLuminanceSource source;

? ? ? ? Point point = configManager.getScreenResolution();

? ? ? ? if (point.x < point.y) {

? ? ? ? ????byte[] rotatedData = new byte[data.length];

? ? ? ? ? ? int newWidth = height;

? ? ? ? ? ? int newHeight = width;

? ? ? ? ? ? for (int y = 0; y < height; y++) {

? ? ? ? ? ? ? ? for (int x = 0; x < width; x++)

? ? ? ? ? ? ? ? ? ? rotatedData[x * newWidth + newWidth - 1 - y] = data[x + y * width];

? ? ? ? ? ? }

? ? ? ? ? ? source = new PlanarYUVLuminanceSource(rotatedData, newWidth, newHeight,

? ? ? ? ? ? ? ? ? ? rect.left, rect.top, rect.width(), rect.height(), false);

? ? ? ? } else {

? ? ? ? ? ? source = new PlanarYUVLuminanceSource(data, width, height,

? ? ? ? ? ? ? ? ? ? rect.left, rect.top, rect.width(), rect.height(), false);

? ? ? ? }

? ? ? ?return source;

? ? }

4) 在CameraConfigurationUtils.java文件中,需要在findBestPreviewSizeValue方法中將screenAspectRatio分情況設置,因為screenAspectRatio的要求總是大值比小值久脯。代碼如下:

double screenAspectRatio = (double) screenResolution.x / (double) screenResolution.y;

修改為:

double screenAspectRatio;

if (screenResolution.x < screenResolution.y) { // 豎屏? ? ? ? ? ?

? ? screenAspectRatio = (double) screenResolution.y / (double) screenResolution.x;

} else {

? ? screenAspectRatio = (double) screenResolution.x / (double) screenResolution.y;

}

5) 在CameraConfigurationUtils.java文件中蒜绽,刪除如下代碼,原因是對于鏡頭分辨率高桶现,而屏幕分辨率低的手機躲雅,這段代碼直接導致掃碼插件采用較低的分辨率去生成用于解析的位圖,所以直接去掉骡和。然后你就會發(fā)現低分辨率的手機相赁,對二維碼、條碼的識別率顯著提高慰于。

if (maybeFlippedWidth == screenResolution.x && maybeFlippedHeight == screenResolution.y) {

? ? ? ? Point exactPoint = new Point(realWidth, realHeight);

? ? ? ? Log.i(TAG, "Found preview size exactly matching screen size: " + exactPoint);

? ? ? ? return exactPoint;

}

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末钮科,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子婆赠,更是在濱河造成了極大的恐慌绵脯,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件休里,死亡現場離奇詭異蛆挫,居然都是意外死亡,警方通過查閱死者的電腦和手機妙黍,發(fā)現死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門悴侵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拭嫁,你說我怎么就攤上這事可免。” “怎么了做粤?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵浇借,是天一觀的道長。 經常有香客問我怕品,道長妇垢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任堵泽,我火速辦了婚禮修己,結果婚禮上,老公的妹妹穿的比我還像新娘迎罗。我一直安慰自己,他們只是感情好片仿,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布纹安。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厢岂。 梳的紋絲不亂的頭發(fā)上光督,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音塔粒,去河邊找鬼结借。 笑死,一個胖子當著我的面吹牛卒茬,可吹牛的內容都是我干的船老。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼圃酵,長吁一口氣:“原來是場噩夢啊……” “哼柳畔!你這毒婦竟也來了?” 一聲冷哼從身側響起郭赐,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤薪韩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捌锭,有當地人在樹林里發(fā)現了一具尸體俘陷,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年观谦,在試婚紗的時候發(fā)現自己被綠了岭洲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡坎匿,死狀恐怖盾剩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情替蔬,我是刑警寧澤告私,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站承桥,受9級特大地震影響驻粟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜凶异,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一蜀撑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剩彬,春花似錦酷麦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽母廷。三九已至,卻和暖如春糊肤,著一層夾襖步出監(jiān)牢的瞬間琴昆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工馆揉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留业舍,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓升酣,卻偏偏與公主長得像舷暮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拗踢,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容