【问题标题】:Invisible SurfaceView for Camera Preview用于相机预览的不可见 SurfaceView
【发布时间】:2012-06-09 09:14:31
【问题描述】:

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

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

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

你知道其他方法吗?

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

【问题讨论】:

标签: android camera surfaceview preview


【解决方案1】:

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

我已添加此代码

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我也是这么想的。在大多数设备上,它甚至可以在没有预览显示的情况下工作,因此您的方法显然也适用于这些设备。但是,在 HTC One X 或 Google Nexus One 等某些设备上,如果没有 SurfaceView 或您的方法,它就无法工作
    • 天哪。感谢您解决了我们的问题。我们也不需要对其进行测试,所以我们不知道发生了什么。非常感激! :D
    • 我也没有其中的一个来测试它,但我收到了一些错误报告,所以我发布了你的方法的更新,我问他们现在是否有效,但仍然没有.随着新的更新,它终于奏效了(使用我问题中的方法),但我仍然想改进它,因为我认为我的方法真的很糟糕......
    • 嗯,是的,我一直在研究它,似乎唯一可行的方法是我们的​​,但显然它只在某些设备上。我想知道是否有一种方法可以在可以使用的设备上使用此方法,而在无法使用的设备上使用另一种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多