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的生命周期结束时,释放摄像头资源。希望这个教程能对刚入行的小白有所帮助。