我們一直在爭取一些與SurfaceViews有關的問題超過一週,並且找不到適當的解決方案。我們閱讀論壇中有關類似問題(甚至Mixare源代碼)的其他問題,但無法找到答案,所以我們希望您能以某種方式幫助我們。與SurfaceView,相機和OpenGL戰鬥
情景: 我們有
- 一個SurfaceView您的相機
- 了一個OpenGL層,肚裏相機頂部的SurfaceView。
- 另一個視圖,它顯示了一些關於我們可以在屏幕上看到的信息。這個是在兩個SurfaceView之上的。
問題:
無論我們怎麼努力,都SurfaceViews顯然不彼此相處得很好。如果我們嘗試:
setContentView(mCameraPreview);
addContentView(mGLSurfaceView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addContentView(mInfoView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
(這似乎是合乎邏輯的),一切都按預期進行,直到我們鎖定/解鎖手機。之後,GLSurfaceView就消失了(不是InfoView,它仍然顯示)。
相反,如果我們嘗試:
setContentView(mGLSurfaceView);
addContentView(mCameraPreview, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addContentView(mInfoView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
那麼問題是,GLSurfaceView只鎖定/解鎖後出現,並且屏幕顯示相機和InfoView中之前。
我們發現,如果我們在顯示視圖的活動中執行onStart()之後的4.6秒(或更多)睡眠主線程,則行爲與預期相同(顯示相機,glsurface和信息視圖,甚至鎖定/解鎖後)。
問題是,我們正在尋找更多......優雅的解決方案。
在我們看來,這個問題是相機拍攝的Camera.open()
比預期更多的時間,所以添加了攝像頭查看,添加了GLSurfaceView,當相機實際打開,它會打開在GLSurfaceView的頂部。對此,我們在GLSurfaceView上使用了bringToFront()
,並將其置於信息視圖之上,但在鎖定/解鎖之後,相機依然在其上打開,只留下一個僅帶相機預覽的屏幕。
任何想法?我們如何在其上顯示SurfaceViews和信息視圖?
你的問題遠遠超出我的理解 - 但要確保你正在調用GLSurfaceView.onPause()和GLSurfaceView.onResume(),正如你應該從容器Activity中調用一樣。這就是我能想到的這個話題。 – harism 2011-04-13 12:49:34
看來我們正試圖解決同樣的問題。我沒有看到你的問題,當我發佈[我自己的](http://stackoverflow.com/questions/5778647/how-to-properly-use-setzordermediaoverlay-on-android)。你嘗試過'setZOrderMediaOverlay()'嗎?我嘗試過,但無法實現這種情況。也許你可以弄清楚如何使用它並解決這個問題。 – alokoko 2011-04-26 16:37:57