应用场景
当时用手机摄像头做实时预览时、需要对视频中的图像做人脸检测、绘制一些效果到人脸上等。。。
实现思路
1.自定义 CameraView extends SurfaceView 做摄像头预览。
2.自定义 FloatingLayerView extends SurfaceView 做上层图标绘制。
3.自定义 DoubleSurfaceView extends FrameLayout 整合上两个View、开启相机、监听帧数据。
关键点:
因为是要使用两个SurfaceView重叠在一起实现最终效果、所以处于上层的SurfaceView必须是背景透明的。
使用下面设置来实现:
setZOrderOnTop(true);// 设置层级处于顶层
getHolder().setFormat(PixelFormat.TRANSPARENT);// 设置背景透明
另外一个做摄像头预览的CameraView 不需要做设置。
技术点:
开启摄像头技术需要使用到的API
静态方法
- Camera.getNumberOfCameras(); // 获取摄像头数量
- Camera.getCameraInfo(camIdx, cameraInfo); // 获取对应ID的摄像头信息
- Camera.open(camIdx); // 开启对应ID的摄像头
- Camera.CameraInfo.CAMERA_FACING_BACK // 后摄像头
- Camera.CameraInfo.CAMERA_FACING_FRONT // 前摄像头
非静态
- mCamera.setDisplayOrientation(result); // 设置摄像头旋转角度
- mCamera.getParameters(); // 获取当前摄像头参数信息