1. 程式人生 > >視訊學習之旅(一) SurfaceView控制元件--------------畫面重疊問題

視訊學習之旅(一) SurfaceView控制元件--------------畫面重疊問題

有一個這樣的需求,下面有2個tab進行切換,第一個是錄影介面(暫定為介面A),第二個是拍照介面(暫定為介面B),我第一個想到的就是用SurfaceView控制元件來實現,在佈局檔案裡面它的屬性很簡單的。然後就想著錄影介面就顯示錄影預覽畫面,拍照介面就顯示拍照預覽畫面,但是當我切換的時候問題就來了。第一次開啟應用是進入介面A,當我切換到介面B時,發現介面A的預覽畫面還顯示在介面B上,這樣就遮擋了介面B的SurfaceView,這樣肯定是不行的,然後我就去查看了SurfaceView的開發文件。

public void setZOrderMediaOverlay (boolean isMediaOverlay)

Control whether the surface view's surface is placed on top of another regular surface view in the window (but still behind the window itself). This is typically used to place overlays on top of an underlying media surface view.

Note that this must be set before the surface view's containing window is attached to the window manager. 

setZOrderMediaOverlay

大概意思就是不論這個SurfaceView是否在其他SurfaceView的上面,這個api的作用通常就是將其覆蓋在其他媒體上面
這個SurfaceView是否在其他SurfaceView的上面,這個api的作用通常就是將其覆蓋在其他媒體上面。然後我就在程式碼中設定了這句程式碼發現並沒有解決我的問題,這個時候我想到了surfaceView的生命週期,原來我在切換的時候它介面A的surfaceView並沒有銷燬,照理來說當我不再介面A的時候他就會隱藏,既然知道他沒有銷燬就好辦了,每次在推出介面A的時候設定當前介面的SurfaceView不可見,剛進入的時候就設定為可見,這樣就不會出現重疊問題了,這也證明了當前介面onPause時,surfaceView是會銷燬的。