最近公司產(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) { }
});
有問題歡迎交流,歡迎指正。