3

BarcodeScanner を縦向きレイアウトで起動したいと思います (アプリケーション全体が縦向きレイアウトになっているため)。また、Google Play から一度に 2 つのアプリケーションをインストールすることは可能でしょうか (マニフェスト ファイルに、アプリケーションで使用しているバーコード スキャナーに何らかの依存関係を追加すると、Google Play はアプリケーションと一緒にバーコード スキャナーを自動的にインストールします)。 .

ありがとう。

4

3 に答える 3

2

ポートレートでバーコード スキャンが必要な場合は、ZXing ライブラリをアプリケーションに組み込み、ポートレート モードで機能するように適切な変更を加えることをお勧めします。

ここでソースコードを入手してください: zxing

ライブラリ内の Android サンプル コードと、バーコード スキャンを実行するための core.jar ファイルを探しています。

Portrait で動作させる方法については、Issue 178 - zxing - Running ZXing in Portraitに従ってください。

スレッドを読んで変更の背景情報を入手することを強くお勧めしますが、その基本は次のとおりです。

  1. 画面を縦向きにするには、アクティビティの向きを縦向きに設定し (マニフェストなどで)、カメラを構成します。CameraConfigurationManager.setDesiredCameraParameters(Camera camera) で camera.setDisplayOrientation(90) を使用します。ただし、次の点に注意してください。

    • setDisplayOrientation(int) には Android 2.2 が必要です
    • setDisplayOrientation(int) は、PreviewCallback.onPreviewFrame で渡されるバイト配列の順序には影響しません。(追加情報については JavaDoc を参照してください)
  2. プレビュー フレームは常に「横向き」であるため、回転させる必要があります。コメント #c11 で提供された時計回りの回転を使用しました。回転後に幅と高さのパラメーターを交換することを忘れないでください。DecodeHandler.java、decode で buildLuminanceSource の前にデータを回転 (byte[] data, int width, int height)

    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;
    
  3. #c11 で推奨されているように、CameraManager.java の getFramingRectInPreview() も変更しました。

    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;
    

zxing ライブラリは、アプリケーションに非常に簡単に適応して、より流動的で統合されたユーザー エクスペリエンスを実現します。強くお勧めします。

于 2012-05-01T01:20:41.307 に答える
0

バーコード スキャナーは縦方向のレイアウトをサポートしていないため、これを行うことはできません。(バーコード スキャナー+はそうしますが、それがインストールされていることに依存することはできません。) マーケットから別のアプリを強制的にインストールする方法はありません。

于 2012-04-04T22:14:11.730 に答える
0

こんにちは、私が試したZxingバーコードスキャナーのポートレートの問題を解決するには、次の手順に従ってください....

4 つの相対ファイルがあります。

1, manifest.xml, you need to make CaptureActivity portrait.

2、DecodeHandler.java、buildLuminanceSource の前にデータを回転します。YCbCr_420_SP と YCbCr_422_SP で動作するため、Y チャネルは平面であり、最初に表示されます。

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];
 }

3、CameraManager.java、getFramingRectInPreview() を変更する必要があります。

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;

4、CameraConfigurationManager.java、setDesiredCameraParameters()でカメラの向きを縦に設定

parameters.set("orientation", "portrait");

getCameraResolution() では、カメラのプレビュー サイズが 320*480 ではなく 480*320 のようなものであるため、x と y を交換する必要があります。

int tmp = cameraResolution.x;
cameraResolution.x = cameraResolution.y;
cameraResolution.y = tmp;
return cameraResolution;
于 2013-02-27T07:25:52.463 に答える