首页 文章

如何自定义CameraView for Android ZBar QrCode Reader

提问于
浏览
6

我正在使用Zbar阅读QRCode . 我将这个https://github.com/DushyanthMaguluru/ZBarScanner示例用于我的活动 . 问题是如何在FrameLayout上显示cameraView?

编辑:

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

1 回答

  • 4

    首先删除我认为获取相机访问权限的行: mCamera = getCameraInstance(); . 你不想这样做,因为 CameraPreview 会为你做这件事 .

    我不会使用FrameLayout,因为项目是一个接一个地放置,你想把你的cameraPreview放在最后 . 所以你应该在另一个 RelativeLayout 中有一个 LinearLayout (我知道,它现在很好's not efficient, but that') . 像(你的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);
    }
    

    还要确保你已经设置了足够的预备:

    <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" />
    

相关问题