【问题标题】:Why is a SurfaceView in a Fragment still visible when the Fragment is hidden?为什么 Fragment 隐藏时,Fragment 中的 SurfaceView 仍然可见?
【发布时间】:2014-01-30 12:41:42
【问题描述】:

只是一个一般性问题:我有一个带有 SurfaceView 的片段。当我通过 FragmentManager 隐藏 Fragment 时,SurfaceView 仍然可见。

我找到了一种解决方法,只需在 Fragment 隐藏/可见时将 View 设置为 INVISIBLE/GONE/VISIBLE - 但我想知道:为什么 SurfaceView 仍然显示?是不是因为SurfaceView基本上是一个“打孔”,也就是说,它不在Fragment的Layout-Hierarchy中,所以在Layout隐藏的时候不能隐藏?

片段的隐藏过程是做什么的?它只是将创建的视图设置为消失吗?

【问题讨论】:

    标签: android android-fragments surfaceview


    【解决方案1】:

    SurfaceView 创建一个完全独立的图形层,由系统合成。 “洞”包含在视图层次结构中,因此布局正确。当涉及SurfaceView 时,很多事情都无法正常工作。

    相比之下,TextureView 实际上是 View 本身的一部分,并且会采取适当的行动。缺点是有一个额外的步骤,将像素从屏幕外缓冲区复制到视图中。这是由 GPU 完成的,因此速度非常快,但如果您尝试以 60fps 的速度为大部分屏幕设置动画,或者在播放全长电影时尽量减少电池消耗,那么SurfaceView 可能是更好的选择。

    如果使用TextureView 是一种选择,这样做可能会让您的生活更简单一些。

    【讨论】:

    • 感谢您的回复!我会使用 TextureView,但 afaik 目前还没有适用于 Android Api > 8 的“GLTextureView”(嗯,可能有一些开源,但我宁愿坚持“测试”代码)
    • 啊。在 API 14 之前根本没有 TextureView,所以如果您需要在 2.x 上运行,它不是一个选项。根据developer.android.com/about/dashboards/index.html 的说法,您可以通过针对较旧的 API 级别再达到 23% 左右。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多