1

我想为相机预览创建隐藏的 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 大小?

编辑:

我还要补充一点,在我的情况下,简单地将 1x1SurfaceView放在活动布局中是行不通的,因为我使用多个布局,并且我相信Views在布局更改时会被破坏......

4

1 回答 1

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在该服务中创建代码。

于 2013-06-11T10:16:44.297 回答