GLSurfaceView在recyclerview中做itemview豎向滑動時出現遮蓋其他控制元件滑出螢幕的詭異異常解決方案
阿新 • • 發佈:2018-12-16
這幾天遇到了一個需求,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)