我只需要获取相机预览数据,但不能看到预览。 由于我在服务中完成所有这些工作,因此我必须创建一个虚拟SurfaceView,它可以很好地工作。
我使用了这个答案中的代码: https://stackoverflow.com/a/10268650/1395697
然而,TYPE_SYSTEM_OVERLAY
它没有用。它是不可见的,但没有收到预览数据(在onPreviewFrame()
中)。当我将此参数更改为0时,我会获得预览数据,但SurfaceView
可见。
你知道其他任何方法吗?
我现在所做的只是制作宽度和高度均为1的可见SurfaceView
,然后创建一个具有特定颜色的ImageView
叠加层,这样就不会看到颜色的变化SurfaceView
。但这根本不是很好,我真的很想做得更好。
答案 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();