1. 程式人生 > >實習雜記(28):SurfaceView+ListView+MediaPlayer滑動時候灰色覆蓋等問題

實習雜記(28):SurfaceView+ListView+MediaPlayer滑動時候灰色覆蓋等問題

1.灰色覆蓋,或者有一層顏色在上面

這個問題應該是   你給listView加了風格,或者給當前的Window加了風格,因為surfaceView,如果你不設定,應該也有一個預設的顏色值

在listView滑動的時候,每個item應該是都會被重繪的,至少layout事件會走的,導致了surface上面有一層顏色,這個是第一個問題,

2.ListView裡面出現視訊畫面殘留

這個問題很尷尬,也是在listView在滑動的時候,但是視訊又在播放,而且如果你有切換橫豎屏的話,這個問題將變得尤為嚴重,

具體的原因應該是這樣的:本來surfaceView是在item上的,item是一個view,這個播放視訊的時候,是由MediaPlayer去把視訊的畫面setDisplay到surfaceHolder上的,

如果播放視訊的是你發生了橫豎切換,導致surfaceView的大小發生了變化,MediaPlayer重新去渲染視訊圖片,再回來,可能就會留有殘影,

然後是如果不發生橫豎屏切換,也會有殘影留下來,是為什麼,我想了下原因:

是因為surfaceView他有個特點,當你從window上拿到一個區域的時候,這個區域有些限制,

最顯著的特點就是:window給你的區域,你不能滑動,不能平移,不能放大縮小,等等,

因為你申請的surfaceView就只有那麼大,不能像平常普通的view一樣隨便的改變大小,位置,透明度,等等,

那麼你在listView滑動的時候,雖然item變了,但是item上的surfaceView沒有跟著走,這就導致了,會有殘影,這很尷尬,

PS:殘影的問題,很麻煩,我還沒有想到解決辦法,最後的好辦法,肯定是自己去繪製了,這個肯定是能夠解決的,

然後第二種選擇是   :使用TextureView,  用起來跟SurfaceView一樣,只是要注意需要開啟硬體加速,第二個是必須執行緒呼叫播放,

3.透明的問題:  背景有其他的activity介面,

理論上當前的視窗(window)上給一個檢視區給你用,然後你再surfview上面繪製的東西會在最上層,

這個時候如果你的surfaceView是以dialog上,或者是PopWindow等形式在當前的activity上顯示出來的,沒有重新重建activity的話,

你的surfaceView後面會有很多東西,這是第一個,所以建議使用surfaceView的時候最好是在新的activity裡面使用

這個透明問題,設定stlye是可以解決的,