gpt4 book ai didi

android - OnResume/OnPause Android 后表面 View z-index 发生变化

转载 作者:太空狗 更新时间:2023-10-29 13:25:01 28 4
gpt4 key购买 nike

我对 Android View 上的 z-index 有疑问。我有一个 GLSurfaceView 和另一个用于视频播放的 SurfaceView 的 Activity 。我在 Internet 上读到多个表面 View 不会放置在同一布局上,但这些帖子有点陈旧,我不知道这是否仍然如此。

无论如何,我对 View 的顺序有疑问。我希望 VideoView 位于 GLSurfaceView 的后面。它在应用程序启动时起作用,因为我在构建 VideoView 时调用了 setZOrderOnTop(false) 方法。

public class LBVideoView extends SurfaceView implements OnPreparedListener, OnCompletionListener, SurfaceHolder.Callback {

private Context m_context;

public LBVideoView(Context context) {
super(context);
m_context = context;

init();
}

private void init()
{
this.getHolder().addCallback(this);
this.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
setZOrderOnTop(false); //CODE TO SET VIDEO VIEW TO BACK
}
}

当应用程序进入后台并稍后恢复时会出现问题。无论我在运行 Android 4.1.2 的设备上做什么,VideoView 都会出现在前面。在我运行 Android 4.4 的 Nexus 5 上它永远不会发生。这在最新的 Android 版本上有变化吗?我需要保持与旧版本的兼容性...

如果我删除所有 View 并再次添加它会起作用,但这对我没有帮助,因为它破坏了视频的表面 View ,我不希望这种情况发生。

有谁知道如何保持 GLSurfaceView 后面的表面 View ,即使在恢复之后也是如此?

最佳答案

首先,#setZOrderOnTop(boolean),不直接控制表面相对于彼此的 z 顺序(我不知道它是否对此有任何控制。)它是记录为控制表面相对于应用“窗口”的 z 顺序。

glSurfaceView.setZOrderMediaOverlay(true) 可能就是您想要的。这将使 glSurfaceView 保持在 LBVideoView 之上。据我所知,这是控制两个表面相对于彼此的 z 顺序的唯一方法。

关于android - OnResume/OnPause Android 后表面 View z-index 发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22407039/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com