我有一个名为ScreensActivity的活动,该活动包含一个GridLayout

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

ScreenViewSurfaceView组成,用于播放.MP4文件中的视频。

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

ScreensActivity
    GridLayout
        ScreenView
        ScreenView
        ScreenView
        ScreenView
        ...


预期行为

我想做的是通过消失(使用ScreenView)其余GridLayout的内容来添加支持,以将setVisibility(GONE)中的ScreenView的“状态”更改为“全屏”。 ,因此它将填充整个GridLayout

一次只能有一个ScreenView处于“全屏状态”

当前行为

当前,这仅在尝试更改ScreenView中的第一个GridLayout的“状态”时起作用(这是预期的行为)。

尝试从第二个ScreenView更改“状态”,依此类推,我遇到以下奇怪的行为(请参见下面示例的visual GIF):

ScreenView的“状态”更改为“全屏”时,它会被其他ScreenView覆盖,例如:


当将第二个ScreenView“状态”更改为“全屏”时,第一个ScreenView会将其覆盖。
将第三个ScreenView“状态”更改为“全屏”时,第一个和第二个“屏幕”都会覆盖他,依此类推。
依此类推,直到将第9个ScreenView的“状态”更改为“全屏”,之前的所有ScreenView都将其覆盖。


重要的提示

例如,当我用SurfaceView替换ScreenView(在TextView内部)时,将ScreenView的“状态”更改为“全屏”会按预期执行,因此似乎产生此问题的有问题的组件奇怪的行为是SurfaceView组成的ScreenView

让我知道添加源代码是否可以帮助您解决我的问题。

非常感谢您的帮助。

最佳答案

我通过用TextureView替换SurfaceView来弄清楚它的行为,该行为与我期望的行为完全相同。

09-28 00:15