Camera
在android5.0的时候关于相机的api发生了很大的改变,也增加很多功能。但是应用开发中在5.0一下也要使用相机啊,所以5.0一下的api还是要学习的
1. 初始化surfaceview,本篇是数据源的预览在surface上的
sv_camera= (SurfaceView) findViewById(R.id.sv_camera);
m_surfaceHolder =sv_camera.getHolder(); // 绑定SurfaceView,取得SurfaceHolder对象
m_surfaceHolder.setFixedSize(720, 1100); // 预览大小設置
m_surfaceHolder.addCallback(this);
surfaceview通过 getHolder获得surfaceholder对象,进行设置预览尺寸,也就是surfaceview的显示大小。这里还设置一个callback,关于surfaceview的相关的回调
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
initCamera();//surfaceview创建后初始化相机
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
根据方法名就知道什么意思了,这里注意的是必须在surface创建成功后才能初始化相机。
2.初始化相机
public void initCamera()
{
//默认打开后置,传参数的话0是后置,1是前置
mCamera = Camera.open(cameraId);
try {
mCamera.setPreviewDisplay(m_surfaceHolder);
mCamera.setDisplayOrientation(90);//设置预览方向,才能显示正常
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//连续对焦
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(2096,1552);//设置预览尺寸
// parameters.setPictureSize(400,600);//设置拍照尺寸
// parameters.setRotation(90);//设置拍照后图片方向
List<Integer> supportedPreviewFormats = parameters.getSupportedPreviewFormats();
//获取摄像头支持的数据格式,一般有两个:17=NV21和842094169=YV12
for (Integer i : supportedPreviewFormats)
{
Log.e("formats","formats:"+i);
}
//选择合适的预览尺寸,list中只有一个,那就什么也别干了
List<Camera.Size> list = parameters.getSupportedPreviewSizes();
if(li