2012-10-12 53 views
12

aplicación de barrido de barras Zxings, lo he implementado, como un proyecto de biblioteca, y funciona.Añadiendo menú al escáner de código de barras de ZXings, y apretando la vista de superficie

Ahora voy a cambiar el tamaño del campo (Campo de destino) que se escanea (también). (aunque el área de escaneo sigue siendo la misma, esto no importó ya que el foco aún estaba en el centro)

Pero luego tuve que insertar un menú en el lado izquierdo. Esto me obliga a cambiar el campo de destino, y esto es si comienza a fallar, si cambio el tamaño de la vista de superficie o viewFinder y si lo envuelvo en una vista relativa, todavía decodifica solo el centro (de la causa). Simplemente no puedo encontrar una solución: -/

Corto: Puedo cambiar el área donde debería estar pasando el escaneo, pero esto solo es visible. El área escaneada real sigue siendo el centro de la pantalla completa y no el centro del área de escaneo visible movida.

¿Alguien me puede ayudar?

XML diseño (con el menú insertar, e innecesario eliminado):

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

imagen de la izquierda: ¿Es la forma en la vista es ahora y elemento colocado en la que no se reconoce .

derecho de imagen: línea consignados en el que se reconoce (¿Cómo puedo comprobar que el área objetivo no cambia):

Image of view result found

Cambios en CameraManager (exprimiendo del visor):

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

Ahora lo he sacado todo en un pequeño proyecto que se puede encontrar here (problema solucionado, faltaba una lib) oct 18 10:14 C ET

+0

Código en su camino, espera –

+0

Perdió las stacktraces, trabajará en recrearlas. Y añádales una explicación en breve –

+0

El fallo se produjo cuando la vista de superficie era más grande que la vista de visor, pero si el mismo tamaño "funciona", sigue siendo un gran problema para reconocerlo. –

Respuesta

1

Si aprieta la vista de superficie junto con la vista del visor, realmente funcionará.

Aunque debe tener en cuenta que la imagen está comprimida, el rectángulo de destino debe ser mucho más pequeño.

Cuestiones relacionadas