9

QRコードを読み取るために、このような素晴らしいライブラリzxingを使用しています。QRコードの取得に成功しました。

現在、私のアプリケーションは横向きモードで実行され、カメラは画面全体を撮影し、赤い QR 検出長方形ボックスが中央にあります。これをポートレート モードに変更し、カメラ ビューのみを赤い QR 検出長方形ボックスに置き換えます。

zxing ライブラリ マニフェスト ファイル内にある CaptureActivity タグを変更します。

android:screenOrientation="portrait".

しかし、私が実際に欲しいものは何も見つかりませんでした。これを取得するためにどこでコードを変更/記述しなければならないかわかりません。

4

3 に答える 3

8

まず、アプリを完全にコピーしないでください。この場合、とにかく独自のアプリを作成する必要があります。レイアウトの向きを変えるほど簡単ではありません。UIは縦向きで書かれていないだけでなく、アプリコードも書かれていません。

固定ポートレートモードのみを使用する場合、これはそれほど難しくありません。フロント/バックカメラで4回転すべてを完全にサポートすることは、正しく行うのが難しくなります。しかし、1つのケースだけではありません。

まず、ポートレートモードのUIをデザインする必要があります。(赤い線のデザインをコピーしないでください。)

実際のアプリコードは、QRコードの向きを気にしません。そこでは何もする必要はありません。ただし、画面を正しく表示するには、変更を加える必要があります。

Camera.getOrientation()カメラがどのように取り付けられているかを検出するには、クエリを実行する必要があります。通常は「上」が右側にあるようなもので、互換性のためにほぼすべてのデバイスがこのように機能すると思います。ただし、技術的には、プレビュー画像をどれだけ回転させるかを知る必要があります。

次にCamera.setDisplayOrientation()、ポートレートモード画面で正しく回転させるために画像をどれだけ回転させるかを指示するために使用します。これは通常「90」です。

最後に、でプレビューサイズを選択する必要がありCamera.Parameters.setPreviewSize()ますが、縦向きであるため、選択した値(480x800と800x480)を反転する必要がある場合があります。

于 2013-03-23T23:14:59.410 に答える
6

私は同じ問題を抱えていて、約2日間行き詰まりました。実際には、目標を達成するためにいくつかのタスクを実行する必要があります。

  1. QR コードを読み取るための Zxing ライブラリをダウンロードします。
  2. プロジェクトを作成し、Zxing ライブラリを追加します。
  3. main.xml ファイルは次のようになります。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    
    <FrameLayout
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center_horizontal">
        <include layout="@layout/capture"/>
    </FrameLayout>
    
    </LinearLayout>
    
  4. メインのアクティビティは次のようになります。

     public class ScannerActivity extends CaptureActivity {
    
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
    
            }
    
            @Override 
            public void handleDecode(Result rawResult, Bitmap barcode) 
            {
       Toast.makeText(this.getApplicationContext(), "Scanned code " + rawResult.getText(), Toast.LENGTH_LONG).show();
            }
        }
    
  5. マニフェスト ファイルに、次のアクセス許可を追加します。

     <uses-permission android:name="android.permission.CAMERA"/>
    
  6. 最後に、カメラの回転の問題に対して行う必要がある非常に重要なタスクは、次のメソッドを

CameraManager.java (パッケージ com.google.zxing.client.android.camera 内)

@SuppressLint("NewApi") public void startPreview() {
    Camera theCamera = camera;
    if (theCamera != null && !previewing) {
        theCamera.setDisplayOrientation(90);
      theCamera.startPreview();
      previewing = true;
    }
  }

それで全部です 。走って楽しんでください:-)

ありがとう..

于 2013-03-28T13:48:06.177 に答える
2

同じ理由で、私はこの図書館で本当にひどい経験をしました。カメラをポートレート モードで表示することに成功した場合でも、引き伸ばされるようです (または、出力画像が引き伸ばされるか、バーコードが感知されないか、正常に動作するデバイスとそうでないデバイスがあります)。

これは、ユーザーが写真を撮るときの自然な向きであるため、Android はカメラのプレビューを横向きモードにすることを単に「好む」と思われます。

結局、私が行ったことは、横向きモードを使用して他のすべてを回転させることです。そのため、ユーザーは縦向きモードだと思いますが、そうではありません。多くのアプリがこの手法を使用していると思います。

この問題をなんとか処理できた場合は、できるだけ多くのデバイスでテストすることをお勧めします。

于 2013-03-23T20:00:41.797 に答える