2012-10-12 11 views
12

Zxings Barscanner App, ich habe es implementiert, als ein Bibliotheksprojekt, und es funktioniert.Hinzufügen von Menü zu ZXings Barcodescanner und Zusammendrücken der Oberflächenansicht

Jetzt soll ich die Größe des Feldes (Zielfeld) ändern, das gescannt wird (auch getan). (obwohl der Scanbereich derselbe bleibt, war dies egal, da der Fokus noch in der Mitte war.)

Aber dann musste ich ein Menü auf der linken Seite einfügen. Dies zwingt mich, das Zielfeld zu ändern, und das ist, wo es abstürzt, wenn ich die Größe der Oberflächenansicht oder der viewFinderView ändere und wenn ich es in eine relative Ansicht verpacke, decodiert es immer nur die Mitte (aus Grund). Ich kann einfach keine Lösung finden: -/

Kurz: Ich bin in der Lage, den Bereich zu ändern, wo der Scan stattfinden sollte, aber das ist nur sichtbar. Der tatsächlich gescannte Bereich ist immer noch der Mittelpunkt des gesamten Bildschirms und nicht der Mittelpunkt des verschobenen sichtbaren Scanbereichs.

Kann mir jemand helfen?

Layout XML (mit dem Menü eingefügt und unnötigen entfernt):

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

Links im Bild: Ist, wie der Blick jetzt ist und Element platziert, wo es nicht ist, erkannt wird .

Rechts im Bild: Item platziert, wo es erkannt wird (wie ich das Zielgebiet überprüfen wird nicht geändert):

Image of view result found

Änderungen an CameraManager (Quetschen des Suchers):

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

Jetzt habe ich es in ein kleines Projekt übernommen, das gefunden werden kann here (Problem behoben, fehlte eine Lib) Okt 18 10:14 C ET

+0

Code auf dem Weg, halten –

+0

Verloren die Stacktraces, wird daran arbeiten, sie neu zu erstellen. Und fügen Sie eine Erklärung zu ihnen in der Nähe –

+0

Der Absturz war, wenn die Oberflächenansicht größer als Viewfinder View war, aber wenn die gleiche Größe, es "funktioniert", immer noch große Schwierigkeiten mit der Erkennung obwohl. –

Antwort

1

Wenn Sie sowohl die Oberflächenansicht zusammen mit der Sucheransicht zusammendrücken, wird es tatsächlich funktionieren.

Obwohl Sie berücksichtigen müssen, dass das Bild gequetscht wird, muss das Zielrechteck so viel kleiner sein.

Verwandte Themen