我想为相机预览创建隐藏的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
在布局更改时被销毁......
答案 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
。