7

我只需要获取相机预览数据,而不是可见预览。由于我在服务中完成所有这些工作,因此我必须创建一个虚拟的 SurfaceView,它工作得非常好。

我使用了这个答案中的代码: https ://stackoverflow.com/a/10268650/1395697

但是,TYPE_SYSTEM_OVERLAY它没有用。它是不可见的,但没有收到预览数据(在 中onPreviewFrame())。当我将此参数更改为 0 时,我会获得预览数据,但它SurfaceView是可见的。

你知道其他方法吗?

我现在所做的只是使SurfaceView宽度和高度为 1 的可见,然后创建ImageView具有特定颜色的叠加层,这样您就看不到SurfaceView. 但这一点都不整洁,我真的想做得更好一点。

4

2 回答 2

1

我也使用了相同的 stackOverflow 答案,并得到了相同的问题。所以:

我已经添加了这段代码

this.setZOrderOnTop(true);
SurfaceHolder h = this.getHolder();
h.setFormat(PixelFormat.TRANSPARENT);

到我的surfaceChanged方法,而不是活动(或我的情况下的服务),并让它变得透明,但日志抱怨废弃的帧:(

于 2013-06-20T09:31:31.230 回答
-1

您实际上根本不必将 SurfaceView 放在您的 UI 上。我们遇到了同样的问题并制作了一个虚拟的 SurfaceView。这是我们的代码:

SurfaceView dummy = new SurfaceView(c);
try {
    mCamera.setPreviewDisplay(dummy.getHolder());
} catch (IOException e) {

}
mCamera.setPreviewCallback(this);
mCamera.startPreview();
于 2012-06-09T09:18:28.213 回答