SurfaceView的背景設置相關問題

最近公司產(chǎn)品要加一個視頻的功能,所以擼的surfaceView方面的代碼比較多。
昨天遇到一個問題,我把視頻所在的Activity的背景設置為透明,那么surfaceView視圖的背景也變成透明了。但是需求中需要背景為黑色,以實現(xiàn)那些信息提示的顯示。

實行的方法:

1.將surfaceview的父容器的背景設置為黑色。

結果: 沒用,還是透明的,查閱資料得知,surfaceView會在當前的activity布局上挖一個洞,這個洞是一直到你父布局的底層的,所以說不管你在surfaceview上設置幾個父容器,最后surfaceview那塊的背景都跟activity的背景一樣。

2.給surfaceview設置背景,并添加 surfacview.setZOrderOnTop(true);這個屬性。

結果:成功,surfaceview繪制的內(nèi)容在Z軸上放在頂層而且surfaceview也成功加上了黑色的背景,但是引出了另外一個問題,在surfaceview所在視圖區(qū)域的其他控件全部被他的畫布給遮住了。所以這個方案也沒有能解決掉問題。

3.在surfaceView第一次生成的時候,用canvas給surfaceView手動繪制一層背景

結果:成功了,但是這種方法要注意的是只能在第一次生成surfaceview的時候去繪制,不然多次繪制,那么就會覆蓋掉你原本要在surfaceview上繪制的內(nèi)容了(我的項目中,surfaceview 得多次重復使用)

下面是我最后使用的代碼:

surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                if (needPaint) {
                    needPaint = false;
                    Canvas canvas = holder.lockCanvas();
                    canvas.drawColor(Color.BLACK);
                    holder.unlockCanvasAndPost(canvas);
                }
 }

            @Oerride
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) { }
        });

有問題歡迎交流,歡迎指正。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容