Android - 如何为视频录制创建隐形相机预览?

时间:2013-06-11 09:55:51

标签: android camera

我想为相机预览创建隐藏的SurfaceView。我尝试了在回答另一个问题时推荐的方法:

WindowManager wm = (WindowManager) mCtx.getSystemService(Context.WINDOW_SERVICE);
params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
        PixelFormat.TRANSLUCENT);        
wm.addView(surfaceview, params);

surfaceview.setZOrderOnTop(true);
mHolder.setFormat(PixelFormat.TRANSPARENT);

但它不是看不见的,实际上它需要整个屏幕。我尝试设置alpha或调整大小但它不起作用。有没有办法让它隐藏或至少将其调整为1x1尺寸?

修改

我还想补充一点,简单地在活动布局中放置1x1 SurfaceView在我的情况下不起作用,因为我使用多个布局,我相信Views在布局更改时被销毁......

1 个答案:

答案 0 :(得分:1)

SurfaceView占据了整个屏幕,因为您的代码将宽度/高度定义为WRAP_CONTENT。尝试使用

new LayoutParams(1, 1, LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT)

要制作隐藏的相机或类似内容,您不应使用当前Context中的Activity,因为您的活动需要在录制期间可见(因此不会隐藏......)。当前活动放到后台时,上下文将为null,录音将停止或崩溃。

您可以尝试运行Service(不可见,但也有上下文),并从该服务的代码中创建SurfaceView