切换相机
[外链图片转存中…(img-CNxGnoau-1734629229371)]
一、Android相机API
目前Android中有三种API,供开发者对相机进行操作
Camera1
Camera2
CameraX
本文重点在于说明Camera1
的使用
二、CameraManager
可以对相机的使用进行封装,只需要定义相机的相关操作,具体实现是Camera1
,或Camera2
,亦或是CameraX
,都无需外部进行修改,只需内部进行定义,首先,先定义相机的相关操作接口ICamera
相机接口
public interface ICamera {
/**
- 打开相机
/
void openCamera(Activity activity, SurfaceTexture surfaceTexture);
/* - 打开相机
/
void openCamera(int facing, Activity activity, SurfaceTexture surfaceTexture);
/* - 关闭相机
/
void closeCamera();
/* - 切换相机
/
void switchCamera();
/* - 切换相机
/
void switchCamera(int facing);
/* - 设置Facing
/
void setCameraFacing(int facing);
/* - 获取Facing
/
int getCameraFacing();
/* - 设置预览尺寸
/
void setPreviewSize(Size cameraSize);
/* - 获取预览尺寸
/
Size getPreviewSize();
/* - 设置显示旋转角度
/
void setDisplayOrientation(int displayOrientation);
/* - 获取显示旋转角度
/
int getDisplayOrientation();
/* - 释放相机
/
void releaseCamera();
/* - 添加相机回调
/
void addOnCameraListener(OnCameraListener onCameraListener);
/* - 移除相机回调
/
void removeOnCameraListener(OnCameraListener onCameraListener);
/* - 移除所有回调
*/
void removeAllOnCameraListener();
}
注意到,里面有个相机回调OnCameraListener
,这是自定义的一个相机回调
public interface OnCameraListener {
/**
- 相机打开
*/
void onCameraOpened(Size cameraSize, int facing);
/**
- 相机关闭
*/
void onCameraClosed();
/**
- 相机异常
*/
void onCameraError(Exception e);
}
接下来,我们新建CameraManager
,实现ICamera
接口
public class CameraManager implements ICamera {
/**
- Camera实现
*/
private final ICamera camera = new Camera1();
/**
- 后台线程
*/
private Handler handl