为什么片段中的SurfaceView在隐藏片段时仍然可见?

时间:2014-01-30 03:29:35

标签: android android-fragments surfaceview

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

我发现了一个解决方法,只是在片段被隐藏/可见时将视图设置为INVISIBLE / GONE / VISIBLE - 但我想知道:为什么SurfaceView仍然显示?是因为SurfaceView基本上是一个“打孔”,这意味着,它不在片段的布局层次结构中,因此在隐藏布局时无法隐藏它?

Fragment的隐藏程序是什么?它是否只是将创建的视图设置为消失?

1 个答案:

答案 0 :(得分:3)

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

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

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