13

Zxings barscanner 应用程序,我已经将它实现为一个库项目,并且它可以工作。

现在我要更改扫描的字段(目标字段)的大小(也完成)。(虽然扫描区域保持不变,但这并不重要,因为焦点仍然在中心。)

但后来我需要在左侧插入一个菜单。这迫使我更改目标字段,如果我更改表面视图或 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;
}

现在我把它全部放到了一个小项目 中

4

1 回答 1

1

如果您将表面视图与取景器视图一起挤压,它实际上会起作用。

尽管您必须考虑到图像被压缩,但目标矩形必须小得多。

于 2012-10-23T06:11:02.427 回答