標籤: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的二維碼掃描——橫豎屏自由切換