我不确定这是否是实现此目的的正确方法,但我想要一个带有GLSurfaceView的弹出窗口。所以我创建了一个dialogFragment,并在其onCreateView方法中返回我的glSurfaceView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = new mGLSurfaceView(this.getDialog().getContext());
return mView;
}
当显示DialogFragment时,整个屏幕变暗,而不仅仅是背景。当我返回一个带有TextView的LinearLayout时,这不会发生。
答案 0 :(得分:3)
这是因为GLSurfaceView的工作方式 - GLSurfaceView的View部分只是一个透明容器,渲染是在位于Layout下方的Surface上完成的(并且在触发DialogFragment的Activity的Layout下面)。现在,当创建DialogFragment时,有一个"调光层"插入DialogFragment和父Activity之间,将焦点带到DialogFragment。这个调光层最终位于GLSurfaceView的透明视图部分之间,但位于渲染表面之上,这解释了为什么整个屏幕显得暗淡。
您可以通过在创建GLSurfaceView时调用setZOrderOnTop(true)来解决此问题 - 这将强制渲染Surface位于DialogFragment Layout中的所有其他视图上方,因此位于调光层上方。