Zxing(v3.2.0)使用eclipse

时间:2016-05-18 01:42:43

标签: android eclipse zxing landscape-portrait portrait

我在Zxing Camera in Portrait mode on Android上按照说明一步一步地在用户使用zxing相机时显示肖像。

但它不会奏效。扫描仪仍然以横向模式出现。 我认为这是因为我使用的是Zxing的最新版本(v3.2.0),并且该指令已被弃用。

如何在v3.2.0 Zxing中完成?

无论如何,以下是我尝试过的步骤:

  1. 修改buildLuminanceSource(..)DecodeHandler.java
  2. 代码:

    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;
    width = height;
    height = tmp;
    
    PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
    
    1. 修改CameraManager.java中的getFramingRectInPreview()
    2. 代码:

      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;
      
      1. 修改CameraConfigurationManager.java中的initFromCameraParameters(...)

        在Zxing(v3.2.0)中,我找不到以下代码

      2. 代码:

        //remove the following
        if (width < height) {
        Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
        int temp = width;
        width = height;
        height = temp;
        }
        
        1. 在CameraConfigurationManager.java中的setDesiredCameraParameters(...)中添加以下行以旋转相机
        2. 代码:

          camera.setDisplayOrientation(90);
          
          1. 在我的项目中,修改AndroidManifest.xml
          2. 代码:

            android:screenOrientation="portrait"
            

1 个答案:

答案 0 :(得分:0)

在做了几天的试验和错误之后,这是我的工作解决方案:

需要额外的工作,让我们说第6步。无论如何都要设置纵向。它起作用了。

第6步。 修改 CaptureActivity.java

中的onResume
if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {
  //setRequestedOrientation(getCurrentOrientation()); // mark this line
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
  //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);  // mark this line
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}