2015-09-17 28 views
11

Sviluppo scanner per codici a barre ZXing successivo a this page su Android Studio.ZXing scanner di codici a barre con layout personalizzato in frammento

My App build.gradle aveva comprendono:

repositories { 
    mavenCentral() 

    maven { 
     url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile files('src/main/jniLibs/scanditsdk-android-4.7.5.jar') 
    compile files('src/main/jniLibs/httpclient-4.0.jar') 

    compile 'com.journeyapps:zxing-android-embedded:[email protected]' 
    compile 'com.google.zxing:core:3.2.0' 
} 

E i miei Fragment.xml 's Layout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#00CC00" 
    android:orientation="vertical" 
    android:weightSum="100"> 

    <com.journeyapps.barcodescanner.CompoundBarcodeView 
     android:id="@+id/barcode_scanner" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="40" 
     > 

    </com.journeyapps.barcodescanner.CompoundBarcodeView> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:gravity="center" 
     android:orientation="horizontal" 
     android:weightSum="100" 
     style="?android:attr/buttonBarStyle" 
     > 


     <Button 
      android:id="@+id/btnStartScan" 
      android:layout_width="0dp" 
      android:layout_height="50dp" 
      android:layout_weight="25" 
      android:text="Start" 
      android:background="@drawable/buttonstyle" 
      style="@style/button_style"/> 

     <Button 
      android:id="@+id/btnStopScan" 
      android:layout_width="0dp" 
      android:layout_height="50dp" 
      android:layout_weight="25" 
      android:text="Stop" 
      android:background="@drawable/buttonstyle" 
      style="@style/button_style"/> 

     <Button 
      android:id="@+id/btnPauseScan" 
      android:layout_width="0dp" 
      android:layout_height="50dp" 
      android:layout_weight="25" 
      android:text="Pause" 
      android:background="@drawable/buttonstyle" 
      style="@style/button_style"/> 

     <Button 
      android:id="@+id/btnResumeScan" 
      android:layout_width="0dp" 
      android:layout_height="50dp" 
      android:layout_weight="25" 
      android:text="Resume" 
      android:background="@drawable/buttonstyle" 
      style="@style/button_style"/> 
    </LinearLayout> 

</LinearLayout> 

Poi, il mio codice Frammento apparire come segue:

public class CMCSMOFragment extends Fragment implements View.OnClickListener { 

    private CompoundBarcodeView barcodeView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     if (container == null) { 
      return null; 
     } 

     View v; 
     v = inflater.inflate(R.layout.cmcsmo_layout, container, false); 

     barcodeView = (CompoundBarcodeView) v.findViewById(R.id.barcode_scanner); 
     barcodeView.decodeContinuous(callback); 

     return v; 
    } 

    private BarcodeCallback callback = new BarcodeCallback() { 
     @Override 
     public void barcodeResult(BarcodeResult result) { 
      if (result.getText() != null) { 
       barcodeView.setStatusText(result.getText()); 
      } 

      //Do something with code result 
     } 

     @Override 
     public void possibleResultPoints(List<ResultPoint> resultPoints) { 
     } 
    }; 
} 

E quando ho crea la mia app, il CompoundBarcodeView mostra solo un vista in bianco con testo ZXing:

Posizionare un codice a barre all'interno del rettangolo mirino per la scansione.

Edit:

Segui Lennon suggerimento, mi aveva usato zxing-minimum ma non permette di lavorare in modalità Ritratto :(

Come devo fare per risolvere questo problema. ? Grazie per tutto!

+0

perché si implementa view.onClicklistener con nessuna funzione onclick? –

+0

La mia classe è troppo lunga, quindi inserisco semplicemente il codice per il mio problema. –

risposta

7

È così facile, proprietario di ZXing ha detto che solo aggiungere seguente codice in onResume e metodo overrided:

@Override 
public void onResume() { 
    barcodeView.resume(); 
    super.onResume(); 
} 

@Override 
public void onPause() { 
    barcodeView.pause(); 
    super.onPause(); 
} 
+0

Ho copiato tutto il tuo codice ma sto ancora ottenendo solo uno schermo nero –

+1

Per maggiori dettagli, segui 'https: // github.com/journeyapps/zxing-android-embedded'. –

1

Prova a utilizzare la libreria minima di zxing come il seguente link: https://github.com/andreipro/zxing-android-minimal

È facile. Non vi resta che aggiungere queste linee nel vostro gradle

repositories { 
    mavenCentral() 

    maven { 
     url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:support-v13:22.2.0' 

    // Zxing minimal libraries 
    compile 'com.embarkmobile:zxing-android-minimal:[email protected]' 
    compile 'com.embarkmobile:zxing-android-integration:[email protected]' 
    compile 'com.google.zxing:core:3.0.1' 
} 

E poi basta chiamare il codice a barre di utilizzare questo

new IntentIntegrator(this).initiateScan(); // `this` is the current Activity 

In te caso, vuoi utilizzare un layout personalizzato, quindi è necessario creare il layout personalizzato seguendo alcuni parametri, come il layout di seguito:

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <SurfaceView android:id="@+id/zxing_preview_view" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

    <com.google.zxing.client.android.ViewfinderView 
     android:id="@+id/zxing_viewfinder_view" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

    <LinearLayout 
     android:id="@+id/zxing_result_view" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@color/zxing_result_view" 
     android:visibility="gone" 
     android:baselineAligned="false"> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:padding="@dimen/zxing_standard_padding"> 

      <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:gravity="right|center_vertical"> 

       <ImageView android:id="@+id/zxing_barcode_image_view" 
        android:layout_width="160dip" 
        android:layout_height="wrap_content" 
        android:maxWidth="160dip" 
        android:maxHeight="160dip" 
        android:layout_marginBottom="@dimen/zxing_half_padding" 
        android:adjustViewBounds="true" 
        android:scaleType="centerInside" 
        tools:ignore="ContentDescription"/> 

       <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 

        <TextView android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/zxing_msg_default_format" 
         android:textColor="@color/zxing_result_minor_text" 
         android:textStyle="bold" 
         android:paddingRight="@dimen/zxing_half_padding"/> 

        <TextView android:id="@+id/zxing_format_text_view" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textColor="@color/zxing_result_minor_text"/> 

       </LinearLayout> 

       <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 

        <TextView android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/zxing_msg_default_type" 
         android:textColor="@color/zxing_result_minor_text" 
         android:textStyle="bold" 
         android:paddingRight="@dimen/zxing_half_padding"/> 

        <TextView android:id="@+id/zxing_type_text_view" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textColor="@color/zxing_result_minor_text"/> 

       </LinearLayout> 

       <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 

        <TextView android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/zxing_msg_default_time" 
         android:textColor="@color/zxing_result_minor_text" 
         android:textStyle="bold" 
         android:paddingRight="@dimen/zxing_half_padding"/> 

        <TextView android:id="@+id/zxing_time_text_view" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textColor="@color/zxing_result_minor_text"/> 

       </LinearLayout> 

       <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 

        <TextView android:id="@+id/zxing_meta_text_view_label" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/zxing_msg_default_meta" 
         android:textColor="@color/zxing_result_minor_text" 
         android:textStyle="bold" 
         android:paddingRight="@dimen/zxing_half_padding"/> 

        <TextView android:id="@+id/zxing_meta_text_view" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textColor="@color/zxing_result_minor_text"/> 

       </LinearLayout> 

      </LinearLayout> 

      <ScrollView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 

       <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="vertical"> 

        <TextView android:id="@+id/zxing_contents_text_view" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textColor="@color/zxing_result_text" 
         android:textColorLink="@color/zxing_result_text" 
         android:textSize="22sp" 
         android:paddingLeft="12dip" 
         android:autoLink="web" 
         android:textIsSelectable="true"/> 

        <TextView android:id="@+id/zxing_contents_supplement_text_view" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textColor="@color/zxing_result_text" 
         android:textColorLink="@color/zxing_result_text" 
         android:paddingLeft="12dip" 
         android:autoLink="web" 
         android:textIsSelectable="true"/> 

       </LinearLayout> 

      </ScrollView> 

     </LinearLayout> 

     <LinearLayout android:id="@+id/zxing_result_button_view" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:gravity="center"> 

      <Button style="@style/zxing_ResultButton" 
       android:visibility="gone"/> 

      <Button style="@style/zxing_ResultButton" 
       android:visibility="gone"/> 

      <Button style="@style/zxing_ResultButton" 
       android:visibility="gone"/> 

      <Button style="@style/zxing_ResultButton" 
       android:visibility="gone"/> 

     </LinearLayout> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_gravity="bottom|center_horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView android:id="@+id/zxing_status_view" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|center_horizontal" 
      android:background="@color/zxing_transparent" 
      android:text="@string/zxing_msg_default_status" 
      android:textColor="@color/zxing_status_text"/> 

     <Button android:id="@id/zxing_back_button" 
      android:layout_marginTop="10dp" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:height="60dp" 
      android:textAlignment="center" 
      android:layout_gravity="bottom|center_horizontal" 
      android:text="@string/zxing_button_cancel"/> 

    </LinearLayout> 

</merge> 

Dopo di che, è possibile impostare il layout sopra in integrator come

IntentIntegrator integrator = new IntentIntegrator(this); 
integrator.setCaptureLayout(R.layout.custom_layout); 
integrator.initiateScan(); 

Ma ricorda, devi seguire quei parametri. Significa che devi usare lo stesso nome per tutte le viste.

+0

Ho fatto questo. Grazie mille. Ma potrei usare ZXing minimo sullo schermo Portrait? –

+0

No. Purtroppo ho provato a utilizzarlo su Portrait, ma non ci sono riuscito. –

+0

Grazie mille per il tuo tempo, bro ^^ –

0

La vostra app hanno il permesso di utilizzare la fotocamera del dispositivo? Aggiungi tale autorizzazione nel tuo manifest e, dopo aver installato l'app, vai alle impostazioni del tuo telefono> app> app> perm. E quindi concedere l'autorizzazione della telecamera