android + ZXing条码扫描库 - 自定义大小和方向

and*_*per 5 android portrait barcode zxing

我已成功使用ZXing条形码扫描库,但仅限于横向模式.

我也成功地将相机预览设置为纵向模式并正确显示(没有拉伸),但现在条形码根本不起作用.这是我在"CameraConfigurationManager.java"上对"setDesiredCameraParameters"所做的更改,以便正确显示相机:

void setDesiredCameraParameters(Camera camera)
{
    Camera.Parameters parameters = camera.getParameters();
    Log.d(TAG, "Setting preview size: " + cameraResolution);
    setFlash(parameters);
    setZoom(parameters);
    camera.setDisplayOrientation(90);
    parameters.set("rotation", 90);
    parameters.setPreviewSize(cameraResolution.y, cameraResolution.x);
    camera.setParameters(parameters);
}
Run Code Online (Sandbox Code Playgroud)

我尝试了其他地方提到的一些解决方案,但要么它们不起作用,要么它们有效但无法正确显示相机预览.示例: 如何在纵向模式下使用Zxing? http://code.google.com/p/zxing/issues/detail?id=178#c46 https://github.com/pplante/zxing-android/issues

当我完成后,我还需要自定义矩形的位置和大小到扫描.我知道我需要在"CameraManager.java"上更改"setManualFramingRect",但我不确定我是否正确操作.这是代码:

public void setManualFramingRect(Rect rect)
{
    if (initialized)
    {
        Point screenResolution = configManager.getScreenResolution();
        if (rect.right >= screenResolution.x)
            rect.right = screenResolution.x - 1;
        if (rect.left < 0)
            rect.left = 0;
        if (rect.bottom >= screenResolution.y)
            rect.bottom = screenResolution.y - 1;
        if (rect.top < 0)
            rect.top = 0;
        framingRect = rect;
        Log.d(TAG, "Calculated manual framing rect: " + framingRect);
        framingRectInPreview = null;
    }
    else
        _requestedFramingRect = new Rect(rect);
}
Run Code Online (Sandbox Code Playgroud)

当然,我已经改变了"openDriver"来打电话:

if (_requestedFramingRect != null)
    setManualFramingRect(_requestedFramingRect);
Run Code Online (Sandbox Code Playgroud)

请帮我.


编辑:现在我发现它在某些设备上不起作用.它在开始时崩溃,如果你调试,你可以看到即使预览也不能正常工作.

Sea*_*wen 2

还有比这更多的事情。例如,当相机方向与设备方向不同时,您需要实际“旋转”相机数据(或者像垂直扫描一样)。当使用前置摄像头时,您需要考虑到它的旋转是反向的。