1. 程式人生 > >GLSurfaceView在recyclerview中做itemview豎向滑動時出現遮蓋其他控制元件滑出螢幕的詭異異常解決方案

GLSurfaceView在recyclerview中做itemview豎向滑動時出現遮蓋其他控制元件滑出螢幕的詭異異常解決方案

這幾天遇到了一個需求,recyclerview中的itemview都是圓角矩形的視訊itemview,然後歷盡千辛萬苦找到了實現視訊圓角的解決方案,但卻發現又進入了另一個坑,一個非常詭異的異常,如下圖

搜尋查閱後得知原因是由於繪製圓角視訊的view是繼承自GlSurfaceView,而每建立一個SurfaceView都會在一個Window之上,單獨的佔據一個執行緒和window,不和父控制元件在一個View樹中,所以不會和其他的view一樣遵從view的層級關係,這就造成了當別的recyclerview的itemview到達recyclerview的頂部後就會消失,而surfaceView就不會消失的詭異異常。

解決的方案是這樣的要明白兩個很關鍵的函式:

1.使GLSurfaceView背景透明,但會出現遮蓋住別的控制元件的異常

       // 這樣可以將SurfaceView背景透明化,有利與繪製視訊圓角,但代價是會遮蓋住別的控制元件,超過recyclerview的高度滑出螢幕
       surfaceView.holder.setFormat(PixelFormat.TRANSLUCENT)
       surfaceView.setZOrderOnTop(true)

2. 遵從view的層級關係,不遮蓋上面的view,代價是背景不再是透明,繪製出的視訊圓角會有四個黑色的角角

      //  想讓surfaceview遵從view的層級關係,不蓋住上面的view的話,可以用下面這個
         surfaceView.setZOrderMediaOverlay(true)