修正Android基於ZXing的二維碼掃描——橫豎屏自由切換

來源:互聯網
上載者:User

標籤:zxing   二維碼   android   橫豎屏   

概述:

  此部落格是基於開源的架構ZXing。ZXing用Java實現的多種格式的1D/2D條碼影像處理庫,它包含了聯絡到其他語言的連接埠。ZXing可以實現使用手機的內建的網路攝影機完成條碼的掃描及解碼。該項目可實現的條碼編碼和解碼。


資源下載:

http://download.csdn.net/detail/u013761665/8853561


修改為豎屏顯示:

第1步:

進入com.google.zxing.client.android包下的CaptureActivity類:

注釋以下代碼:

if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {            setRequestedOrientation(getCurrentOrientation());        } else {            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);        }

第2步:

進入com.google.zxing.client.android包下的DecodeHandler類:

在代碼

PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height);
上面添加:

byte[] rotatedData = new byte[data.length];            for (int y = 0; y < height; y++) {                for (int x = 0; x < width; x++)                    rotatedData[x * height + height - y - 1] = data[x + y * width];            }            int tmp = width; // Here we are swapping, that's the difference to #11            width = height;            height = tmp;            data = rotatedData;


第3步:

進入com.google.zxing.client.android.camera包下的CameraConfigurationManager類:

在Log.i(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;}cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue(parameters, screenResolutionForCamera);


第4步:

進入com.google.zxing.client.android.camera包下的CameraConfigurationManager類:

在代碼camera.setParameters(parameters)的上面添加:

camera.setDisplayOrientation(90);


第5步:

進入com.google.zxing.client.android.camera包下的CameraManager類:

將代碼:

rect.left = rect.left * cameraResolution.x / screenResolution.x;                rect.right = rect.right * cameraResolution.x /                screenResolution.x;                rect.top = rect.top * cameraResolution.y / screenResolution.y;                rect.bottom = rect.bottom * cameraResolution.y /                screenResolution.y;
替換成:

rect.left = rect.left * cameraResolution.y / screenResolution.x;                rect.right = rect.right * cameraResolution.y / screenResolution.x;                rect.top = rect.top * cameraResolution.x / screenResolution.y;                rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;


橫豎屏自由切換:

  上面的5步操作會讓原本橫屏掃描變為豎屏掃描。不過只能是一個方向上的。如果你想讓使用者可以在橫屏和豎屏兩種情況下都能使用的話,就要做一些必要的處理了。

  主要的思路就是,設定一個標誌位Flag來標誌當前的橫豎屏狀態。Flag是在掃描介面CaptureActivity的onResume的時候進行變換,並對外提供getter介面。不過在My Code中還用到了一點就是使用EventBus架構來發布資訊。


橫豎屏情況下的對比圖:


豎屏



橫屏



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

修正Android基於ZXing的二維碼掃描——橫豎屏自由切換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.