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
...
预期行为
我想做的是添加对 GridLayout
中 ScreenView
的 "state" 更改为 "full-screen" 的支持,方法是 消失(使用setVisibility(GONE)
)剩下的ScreenView
,所以它会填满整个GridLayout
.
一次只能ScreenView
"full-screen state"
当前行为
目前,这仅在尝试更改 GridLayout
中第一个 ScreenView
的 "state" 时有效(这是预期的行为)。
当尝试从第二个 ScreenView
等更改 "state" 时,我遇到了以下奇怪的行为(请参阅 visual GIF下面的例子):
将 ScreenView
"state" 更改为 "full-screen" 时,它 被其他 ScreenView
覆盖 ,例如:
- 将第2个
ScreenView
"state"改为"full-screen"时,第1个ScreenView
覆盖他
- 当把第3个
ScreenView
"state"改成"full-screen"时,第1个和第2个"屏幕都覆盖他,以此类推.
- 以此类推,直到把第9个
ScreenView
"state"改成"full-screen",前面的ScreenView
都覆盖了他
重要提示
当我将SurfaceView
(在ScreenView
内)替换为TextView
时,例如,将ScreenView
"state"更改为"full-screen" 按预期执行,因此产生这种奇怪行为的问题组件似乎是 ScreenView
组成的 SurfaceView
。
如果添加源代码可以帮助您解决我的问题,请告诉我。
非常感谢您的帮助。
我通过将 SurfaceView
替换为 TextureView 来解决这个问题,它的行为完全符合我的预期。
我有一个名为 ScreensActivity
的 activity,这个 activity 包含一个 GridLayout
。
每个 GridLayout
children 都是一个名为 ScreenView
的自定义 View
。
ScreenView
包含一个 SurfaceView
,用于播放 .MP4 文件中的视频。
这是上述组件的视图层次结构:
ScreensActivity
GridLayout
ScreenView
ScreenView
ScreenView
ScreenView
...
预期行为
我想做的是添加对 GridLayout
中 ScreenView
的 "state" 更改为 "full-screen" 的支持,方法是 消失(使用setVisibility(GONE)
)剩下的ScreenView
,所以它会填满整个GridLayout
.
一次只能ScreenView
"full-screen state"
当前行为
目前,这仅在尝试更改 GridLayout
中第一个 ScreenView
的 "state" 时有效(这是预期的行为)。
当尝试从第二个 ScreenView
等更改 "state" 时,我遇到了以下奇怪的行为(请参阅 visual GIF下面的例子):
将 ScreenView
"state" 更改为 "full-screen" 时,它 被其他 ScreenView
覆盖 ,例如:
- 将第2个
ScreenView
"state"改为"full-screen"时,第1个ScreenView
覆盖他 - 当把第3个
ScreenView
"state"改成"full-screen"时,第1个和第2个"屏幕都覆盖他,以此类推. - 以此类推,直到把第9个
ScreenView
"state"改成"full-screen",前面的ScreenView
都覆盖了他
重要提示
当我将SurfaceView
(在ScreenView
内)替换为TextView
时,例如,将ScreenView
"state"更改为"full-screen" 按预期执行,因此产生这种奇怪行为的问题组件似乎是 ScreenView
组成的 SurfaceView
。
如果添加源代码可以帮助您解决我的问题,请告诉我。
非常感谢您的帮助。
我通过将 SurfaceView
替换为 TextureView 来解决这个问题,它的行为完全符合我的预期。