Android Camera2 自定义相机
在Android API21中Google发布了Camera2类来取代Camera类,两者的变动也是比较大的,所以需要重新学习一下Camera2的用法,写下这篇博客当做笔记了。
开头是一些网上烂大街的东西,不过作为基础的知识还是要记录一下,官网地址点这里
Android Camera2 流程示意图
Google采用了pipeline(管道)的概念,将Camera Device相机设备和Android Device安卓设备连接起来, Android Device通过管道发送CaptureRequest拍照请求给Camera Device,Camera Device通过管道返回CameraMetadata数据给Android Device,这一切建立在一个叫作CameraCaptureSession的会话中。
Camera2中主要类
Camera2自定义流程图
来看一下具体的实现
TextureView
使用TextureView作为预览的展示View,之前一般使用的都是SurfaceView来实现的。
首先,TextureView在Andriod4.0之后的API中才能使用。其次SurfaceView可以通过SurfaceHolder.addCallback方法在子线程中更新UI,TextureView则可以通TextureView.setSurfaceTextureListener在子线程中更新UI,两者更新画面的方式也有些不同,由于SurfaceView的双缓冲功能,可以是画面更加流畅的运行,但是由于其holder的存在导致画面更新会存在间隔。并且,由于holder的存在,SurfaceView也不能进行像View一样的setAlpha和setRotation方法,但是对于一些类似于坦克大战等需要不断告诉更新画布的游戏来说,SurfaceView绝对是极好的选择。但是比如视频播放器或相机应用的开发,TextureView则更加适合。(摘抄自http://blog.youkuaiyun.com/lrh_12580/article/details/51308139)
private final TextureView.SurfaceTextureListener mSurfaceTextureListener
= new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture texture, int width, int height) {
openCamera(width, height); //打开Camera
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int width, int