13

Zxings barscannerアプリ、ライブラリプロジェクトとして実装しましたが、動作します。

次に、スキャンされるフィールド(ターゲットフィールド)のサイズを変更します(これも実行されます)。(スキャン領域は同じままですが、焦点がまだ中央にあるため、これは問題ではありませんでした。)

しかし、それから私は左側にメニューを挿入する必要がありました。これにより、ターゲットフィールドを変更する必要があります。これは、クラッシュし始めた場合です。surfaceviewまたはviewFinderViewのサイズを変更し、相対ビューでラップした場合でも、(原因の)中心のみがデコードされます。私は解決策を理解することができません:-/

短い:スキャンが行われるべき領域を変更することはできますが、これは表示されるだけです。実際にスキャンされた領域は、画面全体の中心であり、移動された可視スキャン領域の中心ではありません。

誰か助けてもらえますか?

レイアウトXML(メニューが挿入され、不要なものが削除されています):

<SurfaceView
    android:id="@+id/preview_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<com.google.zxing.client.android.ViewfinderView
    android:layout_marginLeft="120dip"
    android:id="@+id/viewfinder_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/transparent" />

<LinearLayout
    android:id="@+id/buttonPanel"
    android:layout_width="120dip"
    android:layout_height="fill_parent"
    android:background="#000"
    android:orientation="vertical"
    android:paddingBottom="15dip"
    android:paddingTop="15dip" >

    <TextView 
        android:id="@+id/menuText"
        android:layout_weight="1"
        android:layout_width="90dip"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dip"
        android:text="@string/menu_title"/>
    <ImageView
        android:id="@+id/d1Button"
        android:layout_width="90dip"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dip"
        android:layout_weight="2"
        android:onClick="scanner1d"
        android:src="@drawable/d1image" />

    <ImageView
        android:id="@+id/d2Button"
        android:layout_width="90dip"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dip"
        android:layout_weight="2"
        android:onClick="scanner2d"
        android:src="@drawable/d2image" />
</LinearLayout>

<LinearLayout
    android:id="@+id/result_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/result_view"
    android:orientation="vertical"
    android:padding="4dip"
    android:visibility="gone" >

       **removed**
</LinearLayout>
   **removed**

左の写真:ビューが現在どのようになっていて、アイテムが認識されていない場所に配置されているかを示しています。

右の写真:認識された場所に配置されたアイテム(ターゲット領域が変更されていないことを確認する方法):

ビューの画像 結果が見つかりました

CameraManagerへの変更(ファインダーの絞り):

public Rect getFramingRect() {
    // added
    int menuSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
                    (float) 120, context.getResources().getDisplayMetrics());
    // end of added

    Point screenResolution = configManager.getScreenResolution();
    if (framingRect == null) {
        if (camera == null) {
            return null;
        }
        int width = screenResolution.x * 3 / 4;
        if (width < MIN_FRAME_WIDTH) {
            width = MIN_FRAME_WIDTH;
        } else if (width > MAX_FRAME_WIDTH) {
            width = MAX_FRAME_WIDTH;
        }
        int height = screenResolution.y * 3 / 4;
        if (height < MIN_FRAME_HEIGHT) {
            height = MIN_FRAME_HEIGHT;
        } else if (height > MAX_FRAME_HEIGHT) {
            height = MAX_FRAME_HEIGHT;
        }


        // added menu size for calculation

        int leftOffset = ((screenResolution.x -menuSize - width) / 2);
        int topOffset = (screenResolution.y - height) / 2;
        framingRect = new Rect(leftOffset, topOffset, leftOffset + width,
                topOffset + height);
        Log.d(TAG, "Calculated framing rect: " + framingRect);
    }
    return framingRect;
}

今、私はそれをすべてここで見つけることができる小さなプロジェクトに取り出しまし た(問題は修正されました、ライブラリがありませんでした)oct 18 10:14 CET

4

1 に答える 1

1

両方のサーフェス ビューとビューファインダー ビューを一緒に絞ると、実際に機能します。

画像が圧迫されていることを考慮する必要がありますが、ターゲットの四角形はそれだけ小さくする必要があります。

于 2012-10-23T06:11:02.427 に答える