很多时候,我们有这么一个需求:需要拍摄视频,拍照或者录屏,又或者仅仅获取camera的界面作为底层view来实现一种透明UI效果,博主遇到的需求就是获取camera的view并显示在底层.同时,后面还有一个录屏的功能需求,即获取屏幕的内容录成视频,发现有很多坑,后面有时间会记录一下.
首先,一般获取camera的界面一般采用surfaceView来实现,它一般用于视频,拍照,游戏等界面,是view的子类,但在视频播放等方面比view要好很多.
这里分析的话就没必要了,都比较基础,先获取holder来设置属性,包括显示的分辨率,类型以及设置callback监听等,直接上代码了,关键部分都有注释:
@Bind(find_memory_bg) SurfaceView camera_view;
private DisplayMetrics dm; private Camera cameraBack; private boolean preview = false;
//初始化背景 private void initCameraBackground(){ camera_view.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); camera_view.getHolder().setFixedSize(640, 480); camera_view.getHolder().addCallback(new FindMemoryActivity.SurfaceViewCallback()); }
然后需要实现自定义surfaceViewCallback监听器:
private final class SurfaceViewCallback implements SurfaceHolder.Callback { /** * surfaceView 被创建成功后调用此方法 */ @Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG, "surfaceCreated"); /* * 在SurfaceView创建好之后 打开摄像头