0

Qrreader に問題があります。

中央の画面でのみスキャンする必要があります。

コードがスキャンされる前に、qr コードを配置する必要がある場所に正方形が必要です。

FrameLayout でマージンを追加しようとしましたが、フレームに黒い画面があります。

それは私のxmlファイルです:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/cameraPreview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_weight="1" 
        >

    </FrameLayout>

    <TextView
        android:id="@+id/scanText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="Scanning..."
        android:layout_marginTop="20dp"
        android:textColor="@android:color/white"
        android:textSize="21sp" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:src="@drawable/prv" />

    <Button
        android:id="@+id/ScanButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:visibility="invisible"
        android:text="Scan" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:text="Button"
        android:onClick="turnFlash"
        />

</RelativeLayout>

そして、スキャンする私のコード:

 PreviewCallback previewCb = new PreviewCallback() {
            public void onPreviewFrame(byte[] data, Camera camera) {
                Camera.Parameters parameters = camera.getParameters();
                Size size = parameters.getPreviewSize();

                Image barcode = new Image(size.width, size.height, "Y800");
                barcode.setData(data);                

                int result = scanner.scanImage(barcode);   

                if (result != 0 && !is_checking) {
                    is_checking = true;
                    String text="";

                    SymbolSet syms = scanner.getResults();
                    for (Symbol sym : syms) {
                        text = sym.getData();
                    }


                    if(text.substring(0, 3).matches("htt|www")){
                        previewing = false;
                        mCamera.setPreviewCallback(null);
                        mCamera.stopPreview();
                        scanText.setText(text);
                        v.vibrate(500);

                        try{
                            if(text.substring(0, 3).equalsIgnoreCase("www")){
                                scanText.setText("http://"+scanText.getText().toString());
                            }
                            startWebsite(scanText.getText().toString());
                        }catch(Exception e){

                        }
                    }

                    is_checking = false;
                }
            }
        };

Zbar ライブラリを使用しています。

4

1 に答える 1

0

私のアプリ JustScan (eclipse プロジェクトとして code.google.com で見つけることができます) を見てください。ここでは、あなたと同じサンプル コードを使用し、必要に応じて変更しました。

アイデアは、CameraPreview クラスのメソッド draw(Canvas canvas) をオーバーライドすることです。ここで、スキャン領域の四角形を描画できます。オーバーライドされたメソッドが確実に呼び出されるようにするには、メソッド surfaceCreated(...) で setWillNotDraw(false) を呼び出す必要があります。

プレビューをスキャン領域にトリミングするには、previewCallback 関数のメソッド onPreviewFrame(...) で scanImage() に渡す前に、画像メソッド setCrop(...) を使用してバーコード画像をトリミングします。

非常に短い説明で申し訳ありませんが、ここに完全なコードを記載することはできません。とにかく役立つことを願っています...

于 2014-02-24T10:26:43.020 に答える