Android显示摄像头画面实现教程

1. 整体流程

下面是实现Android显示摄像头画面的整体流程:

步骤 描述
1 获取摄像头权限
2 初始化摄像头
3 创建预览界面
4 开始预览
5 停止预览
6 释放资源

2. 代码实现

2.1 获取摄像头权限

在AndroidManifest.xml文件中添加以下权限:

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

2.2 初始化摄像头

在Activity的onCreate方法中,首先获取到Camera对象并打开摄像头:

Camera camera = null;
try {
    camera = Camera.open();
} catch (Exception e) {
    e.printStackTrace();
}

2.3 创建预览界面

在布局文件中添加一个SurfaceView用于显示摄像头预览画面:

<SurfaceView
    android:id="@+id/surfaceView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

在Activity中获取SurfaceView,并设置SurfaceHolder.Callback用于监听SurfaceView的状态:

final SurfaceView surfaceView = findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // 设置预览界面
        try {
            camera.setPreviewDisplay(holder);
            camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // SurfaceView改变时调用
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // SurfaceView销毁时调用
    }
});

2.4 开始预览

在SurfaceHolder.Callback的surfaceCreated方法中,通过Camera对象设置预览界面并开始预览。

2.5 停止预览

在SurfaceHolder.Callback的surfaceDestroyed方法中,停止预览并释放Camera对象。

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    if (camera != null) {
        camera.stopPreview();
        camera.release();
        camera = null;
    }
}

2.6 释放资源

在Activity的onDestroy方法中释放Camera对象:

@Override
protected void onDestroy() {
    super.onDestroy();
    if (camera != null) {
        camera.release();
        camera = null;
    }
}

3. 类图

下面是本教程涉及的类的类图表示:

classDiagram
    class Camera {
        + open() : void
        + setPreviewDisplay(SurfaceHolder) : void
        + startPreview() : void
        + stopPreview() : void
        + release() : void
    }

    class SurfaceView {
        + getHolder() : SurfaceHolder
    }

    class SurfaceHolder {
        + addCallback(SurfaceHolder.Callback) : void
    }

    class SurfaceHolder.Callback {
        + surfaceCreated(SurfaceHolder) : void
        + surfaceChanged(SurfaceHolder, int, int, int) : void
        + surfaceDestroyed(SurfaceHolder) : void
    }

总结

通过以上步骤,我们可以实现Android显示摄像头画面。首先获取摄像头权限,然后初始化摄像头并创建预览界面。在预览界面的SurfaceHolder.Callback中,可以开始预览和停止预览。最后,在Activity的生命周期结束时,释放摄像头资源。希望这个教程能对刚入行的小白有所帮助。