前三篇都是引用系统相机,从第四篇开始,引入自定义相机
1.使用 SurfaceView 来作为相机实时预览的控件,该控件的绘制在子线程中完成,不会阻塞UI主线程。
让该类继承 SurfaceHolder.Callback(implements SurfaceHolder.Callback)
通过SurfaceView 获得SurfaceHolder,为SurfaceHolder添加CallBack事件
mHolder=surfaceView.getHolder();
mHolder.addCallback(this);
实现 1.surfaceCreated 2.surfaceChanged 3.surfaceDestroyed 这三个方法
2.获得相机
private Camera getCamera()
{
mCamera=null;
try {
mCamera = Camera.open();
}
catch (Exception e)
{
e.printStackTrace();
}
return mCamera;
}
3.设置相机预览模式
private void setStartPreview(Camera camera,SurfaceHolder surfaceHolder)
{
try {
//把相机的预览指定在SurfaceHolder里
camera.setPreviewDisplay(surfaceHolder);
//系统默认横屏,将其改为竖屏
camera.setDisplayOrientation(90);
//开始预览
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
4.释放相机资源
private void releaseCamera()
{
if(mCamera!=null)
{
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera=null;
}
}