用于相机预览的隐形SurfaceView

时间:2012-06-09 09:14:32

标签: android camera surfaceview preview

我只需要获取相机预览数据,但不能看到预览。 由于我在服务中完成所有这些工作,因此我必须创建一个虚拟SurfaceView,它可以很好地工作。

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

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

你知道其他任何方法吗?

我现在所做的只是制作宽度和高度均为1的可见SurfaceView,然后创建一个具有特定颜色的ImageView叠加层,这样就不会看到颜色的变化SurfaceView。但这根本不是很好,我真的很想做得更好。

2 个答案:

答案 0 :(得分:1)

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

我添加了此代码

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

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

答案 1 :(得分:-1)

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

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

}
mCamera.setPreviewCallback(this);
mCamera.startPreview();