为什么当显示包含 GLSurfaceView 的对话片段时屏幕变暗



我不确定这是否是完成此操作的正确方法,但我想要一个带有GLSurfaceView的弹出窗口。所以我创建了一个dialogFragment,并在其onCreateView方法中返回了glSurfaceView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = new mGLSurfaceView(this.getDialog().getContext());
    return mView;
}

当显示对话片段时,整个屏幕变暗,而不仅仅是背景。当我返回一个内部带有文本视图的线性布局时,这不会发生。

这是因为 GLSurfaceView 的工作方式 - GLSurfaceView 的视图部分只是一个透明容器,渲染是在位于布局下方(以及触发 DialogFragment 的活动的布局下方)的 Surface 上完成的。现在,当创建对话片段时,在对话片段和父活动之间插入了一个"调光层",以将焦点带到对话片段上。此调光层最终位于 GLSurfaceView 的透明视图部分之间,但在渲染表面上方,这解释了为什么整个屏幕看起来变暗。

您可以通过在创建 GLSurfaceView 时调用 setZOrderOnTop(true) 来解决此问题 - 这将强制渲染图面位于 DialogFragment 布局中的所有其他视图之上,即在调光层上方。

最新更新