2012-10-12 16 views
12

Zxings barscanner ứng dụng, tôi đã thực hiện nó, như một dự án thư viện, và nó hoạt động.Thêm Menu vào ZXings barcodescanner, và ép surfaceview

Bây giờ tôi phải thay đổi kích cỡ của trường (Trường mục tiêu) được quét (cũng được thực hiện). (mặc dù khu vực quét vẫn giữ nguyên, điều này không quan trọng vì tiêu điểm vẫn ở giữa.)

Nhưng sau đó tôi cần chèn menu ở bên trái. Điều này buộc tôi phải thay đổi Trường Mục tiêu và điều này bắt đầu bị lỗi, nếu tôi thay đổi kích thước của surfaceview hoặc viewFinderView và nếu tôi quấn nó trong chế độ xem tương đối, nó vẫn chỉ giải mã trung tâm (nguyên nhân). Tôi chỉ không thể tìm ra một giải pháp: -/

Ngắn: Tôi có thể thay đổi khu vực đang thực hiện quét nhưng điều này chỉ hiển thị. Vùng quét thực tế vẫn là trung tâm của màn hình hoàn chỉnh và không phải là trung tâm của vùng quét có thể nhìn thấy được.

Có ai có thể giúp tôi không?

layout XML (với menu chèn, và không cần thiết loại bỏ):

<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** 

ảnh Left: Liệu cách xem giờ và mục đặt nơi nó không được công nhận .

Ngay hình ảnh: Item đặt nơi nó được công nhận (Làm thế nào tôi kiểm tra xem khu vực mục tiêu là không thay đổi):

Image of view result found

Changes để CameraManager (nén của kính ngắm):

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

Bây giờ tôi đã đưa tất cả ra thành một dự án nhỏ có thể được tìm thấy here (sự cố đã được khắc phục, thiếu một lib) oct 18 10:14 C ET

+0

Mã theo cách của nó, giữ trên –

+0

Mất stacktraces, sẽ hoạt động khi tạo lại chúng. Và thêm một lời giải thích cho họ ngay –

+0

Vụ tai nạn là khi surfaceview lớn hơn thì viewfinderview, nhưng nếu cùng kích thước, nó "hoạt động", vẫn còn rắc rối lớn với việc nhận ra mặc dù. –

Trả lời

1

Nếu bạn siết cả hai bản xem lướt sóng cùng với chế độ xem, nó sẽ thực sự hoạt động.

Mặc dù bạn phải cân nhắc rằng hình ảnh bị vắt, do đó hình chữ nhật mục tiêu phải nhỏ hơn nhiều.

Các vấn đề liên quan