2012-12-06 64 views
2

我不確定這是否是完成此操作的正確方法,但我想要一個帶有GLSurfaceView的彈出窗口。所以,我創建了一個dialogFragment並在其onCreateView方法我回到我的glSurfaceView:爲什麼當顯示包含GLSurfaceView的DialogFragment時,屏幕變暗?

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

當DialogFragment顯示在整個屏幕變暗,而不僅僅是背景。當我返回帶有TextView的LinearLayout時,這不會發生。

回答

2

這是因爲GLSurfaceView的工作原理--GLSurfaceView的View部分只是一個透明的容器,並且在位於Layout下面的Surface上(並且在觸發DialogFragment的Activity的Layout下面) 。現在,當創建DialogFragment時,會在DialogFragment和父活動之間插入一個「調光層」,以將焦點帶入DialogFragment。該調光層最終位於GLSurfaceView的透明視圖部分之間,但位於渲染表面之上,這解釋了爲什麼整個屏幕會變暗。

您可以通過在創建GLSurfaceView時調用setZOrderOnTop(true)來解決此問題 - 這將強制渲染Surface位於DialogFragment Layout中所有其他視圖之上,因此在調光層之上。

相關問題