2012-10-12 3 views
12

App di barscanner Zxings, l'ho implementata come progetto di libreria e funziona.Aggiunta di menu a barcodescanner ZXings e spremitura della vista prospettica

Ora devo modificare la dimensione del campo (campo obiettivo) che viene scansionato (fatto anche). (anche se l'area di scansione rimane invariata, non importa perché la messa a fuoco era ancora al centro.)

Ma poi ho dovuto inserire un menu nella parte sinistra. Questo mi obbliga a cambiare il Target Field, e questo è quando inizia a schiantarsi, se cambio la dimensione della vista superficiale o viewFinderView e se lo avvolgo in una vista relativa, decodifica ancora solo il centro (della causa). Non riesco a capire una soluzione: -/

Short: Sono in grado di modificare l'area in cui dovrebbe essere eseguita la scansione, ma questo è solo visibile. L'area di scansione effettiva è ancora il centro dello schermo completo e non il centro dell'area di scansione visibile spostata.

Qualcuno può aiutarmi?

di layout XML (con il menu inserito, e inutile rimossa):

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

foto a sinistra: è come la vista è ora e oggetto collocato in cui non viene riconosciuta .

destro immagine: Oggetto collocato in cui si riconosce (Come verifico che area di destinazione non viene modificato):

Image of view result found

Modifiche a CameraManager (spremitura del mirino):

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

Ora ho preso tutto in un piccolo progetto che può essere trovato here (problema risolto, mancava un lib) ott 18 10:14 C ET

+0

Codice a modo suo, attendere –

+0

Perdere gli stacktraces, lavorerà per ricrearli. E aggiungi loro una breve spiegazione –

+0

L'arresto anomalo si verificava quando la vista di superficie era più grande di viewfinderview, ma se la stessa dimensione, "funzionava", creava comunque grossi problemi con il riconoscimento. –

risposta

1

Se si sprema sia la vista della vista insieme a viewfinderview, funzionerà effettivamente.

Anche se si deve prendere in considerazione che l'immagine è schiacciata, il rettangolo di destinazione deve essere molto più piccolo.

Problemi correlati