7

我正在開發面向Android的多媒體視頻處理應用程序,並且遇到了一些問題。我正在使用FragmentPagerAdapter類,其中有許多不同的片段用於各種視頻處理步驟。Android SurfaceView導致屏幕閃爍

我的第一個Fragment包含SurfaceViewMediaPlayer,它連同各種播放控件一起提供它。當我從片段1(使用SurfaceView)滑動到片段2(此時爲空)時,發生了我的問題。如果我還沒有叫start(),沒有什麼不尋常的事情發生,我可以正常地在片段之間滑動。但是,一旦我撥打start(),即使我已將MediaPlayer置於空閒狀態,並且不會將幀傳送到SurfaceView,但當我滑動到下一個Fragment時,整個屏幕開始閃爍。唯一能夠阻止這種情況的方法是通過滑動到第三個Fragment以使Fragment破壞Fragment,或者通過home或back按鈕退出應用程序以銷燬視圖。

我不能爲我的生活弄清楚爲什麼會發生這種情況,除此之外也許SurfaceView渲染線程以某種方式干擾主UI線程。 LogCat上也沒什麼不尋常的,所以我有點卡住了。我使用android 4.1運行Galaxy Nexus作爲我的測試硬件。

任何幫助,將不勝感激!

JT

更新:我設法找到一個解決辦法,現在通過覆蓋在FragmentPagerAdaptersetPrimaryItem()方法來調用從層次結構中刪除SurfaceView的方法(在其LinearLayout容器使用removeView())當視頻播放器Fragment停止顯示時,然後在其再次激活時恢復SurfaceView。不幸的是,當這種情況發生時,仍然有點眨眼,所以如果有人有其他想法,我會很感激!

+0

檢查這個答案。你的問題是這樣的:[鏈接](http://stackoverflow.com/questions/8772862/surfaceview-flashes-black-on-load) – RATHI

回答

4

Android Developers Blog

這個小工具[SurfaceView]通過創建放置應用程序的窗口後面的新窗口。然後在應用程序窗口中打出一個洞來顯示新窗口。

由於SurfaceView的內容不在應用程序窗口中,因此無法高效地轉換(移動,縮放,旋轉)。這使得很難在ListView或ScrollView中使用SurfaceView。

解決方案是使用一個TextureView,如果你正在建造4.0或以上。如果你有興趣使用TextureView來顯示視頻this thread可能有幫助

+0

真棒答案....我花了我1周解決這個問題。 ....最後刪除了SurfaceView/VideoView並使用了TextureView。 –