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);
}
他の場所で言及されているいくつかの解決策を試しましたが、機能しないか、機能するがカメラのプレビューを正しく表示できません。例: ポートレートモードで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);
}
もちろん、私は「openDriver」を呼び出すように変更しました:
if (_requestedFramingRect != null)
setManualFramingRect(_requestedFramingRect);
私を助けてください。
編集:今、私はそれがいくつかのデバイスで動作しないことを発見しました。最初はクラッシュします。デバッグすると、プレビューでもうまく機能しないことがわかります。