GridLayout SurfaceView children 在更改它们的可见性时相互重叠

GridLayout SurfaceView children overlays each other when changing the visibility of them

我有一个名为 ScreensActivity 的 activity,这个 activity 包含一个 GridLayout

每个 GridLayout children 都是一个名为 ScreenView 的自定义 View

ScreenView 包含一个 SurfaceView,用于播放 .MP4 文件中的视频。

这是上述组件的视图层次结构:

ScreensActivity
    GridLayout
        ScreenView
        ScreenView
        ScreenView
        ScreenView
        ...

预期行为

我想做的是添加对 GridLayoutScreenView 的 "state" 更改为 "full-screen" 的支持,方法是 消失(使用setVisibility(GONE))剩下的ScreenView,所以它会填满整个GridLayout.

一次只能ScreenView "full-screen state"

当前行为

目前,这仅在尝试更改 GridLayout 中第一个 ScreenView 的 "state" 时有效(这是预期的行为)。

当尝试从第二个 ScreenView 等更改 "state" 时,我遇到了以下奇怪的行为(请参阅 visual GIF下面的例子):

ScreenView "state" 更改为 "full-screen" 时,它 被其他 ScreenView 覆盖 ,例如:

重要提示

当我将SurfaceView(在ScreenView内)替换为TextView时,例如,将ScreenView "state"更改为"full-screen" 按预期执行,因此产生这种奇怪行为的问题组件似乎是 ScreenView 组成的 SurfaceView

如果添加源代码可以帮助您解决我的问题,请告诉我。

非常感谢您的帮助。

我通过将 SurfaceView 替换为 TextureView 来解决这个问题,它的行为完全符合我的预期。