2013-08-06 3 views
6

Я использую Zbar для чтения QRCode. Я использую этот пример https://github.com/DushyanthMaguluru/ZBarScanner для своей деятельности. Вопрос: как я могу показать CameraView на моем FrameLayout?Как настроить CameraView для android ZBar QrCode Reader

EDIT:

 
     @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState);

setContentView(R.layout.main); 
    //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    mCamera = getCameraInstance(); 

    if(!isCameraAvailable()) 
    { 
     cancelRequest(); 
     return; 
    } 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    mAutoFocusHandler = new Handler(); 

    setupScanner(); 

    mPreview = new CameraPreview(this, this, autoFocusCB); 
    //setContentView(mPreview); 
    FrameLayout preview = (FrameLayout)findViewById(R.id.cameraPreview); 
    preview.addView(mPreview); 
} 

+0

Что вы пытаетесь до сих пор? Вы можете помещать 'SurfaceView' внутрь. Я считаю, что в Интернете есть «некоторые» учебники. – gunar

+0

@gunar - можете ли вы дать мне ссылку – userAsk

+0

Снова прочитав это, зачем вам самому показывать камеру? Предполагается, что вы вызываете специфическую активность zbar и предоставляете разрешения камеры. Что-то вроде: http://stackoverflow.com/questions/14494034/zbar-integration-into-android-app – gunar

ответ

4

Прежде всего удалить строку, которая кажется мне получить доступ к камере: mCamera = getCameraInstance();. Вы не хотите этого делать, поскольку CameraPreview сделает это за вас.

Я бы не использовал FrameLayout, поскольку предметы ставятся один за другим, и вы хотите, наконец, поставить свою камеру. Таким образом, вы должны иметь LinearLayout в другом RelativeLayout (я знаю, это не эффективно, но на данный момент все в порядке). Нечто подобное (макет main.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:id="@+id/zbar_layout_area" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 
    </LinearLayout> 

    <ImageView 
     android:id="@+id/my_own_image_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" /> 

    <TextView 
     android:id="@+id/my_own_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" /> 

</RelativeLayout> 

Теперь вам нужно будет поставить CameraPreview в zbar_layout_area. По этой причине, попытайтесь изменить код (слепое кодирование):

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (!isCameraAvailable()) { 
     // Cancel request if there is no rear-facing camera. 
     cancelRequest(); 
     return; 
    } 

    // Hide the window title. 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.main); 

    mAutoFocusHandler = new Handler(); 

    // Create and configure the ImageScanner; 
    setupScanner(); 

    // Create a RelativeLayout container that will hold a SurfaceView, 
    // and set it as the content of our activity. 
    mPreview = new CameraPreview(this, this, autoFocusCB); 
    LinearLayout zbarLayout = (LinearLayout) findViewById(R.id.zbar_layout_area); 
    mPreview.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    zbarLayout.addView(mPreview); 
} 

Также убедитесь, что вы установили достаточно prermissions:

<uses-permission android:name="android.permission.CAMERA" /> 

    <uses-feature 
     android:name="android.hardware.camera" 
     android:required="false" /> 
    <uses-feature 
     android:name="android.hardware.camera.autofocus" 
     android:required="false" /> 
+0

Какие LayoutParams следует использовать? Я попробовал 3 класса, но когда-нибудь программа остановилась. – userAsk

+0

Какие ошибки вы получаете? LinearLayout.LayoutParams следует делать, если вы добавляете представление в LinearLayout. – gunar

+0

Unfortunatelly, Zbar остановился: ERROR LIST: performLauchActivity hadnleLauchActivity AndroidRuntimeException requestWindowFeature ZbarScannerActivity – userAsk

Смежные вопросы