SurfaceView的背景设置相关问题

最近公司产品要加一个视频的功能,所以撸的surfaceView方面的代码比较多。
昨天遇到一个问题,我把视频所在的Activity的背景设置为透明,那么surfaceView视图的背景也变成透明了。但是需求中需要背景为黑色,以实现那些信息提示的显示。

实行的方法:

1.将surfaceview的父容器的背景设置为黑色。

结果: 没用,还是透明的,查阅资料得知,surfaceView会在当前的activity布局上挖一个洞,这个洞是一直到你父布局的底层的,所以说不管你在surfaceview上设置几个父容器,最后surfaceview那块的背景都跟activity的背景一样。

2.给surfaceview设置背景,并添加 surfacview.setZOrderOnTop(true);这个属性。

结果:成功,surfaceview绘制的内容在Z轴上放在顶层而且surfaceview也成功加上了黑色的背景,但是引出了另外一个问题,在surfaceview所在视图区域的其他控件全部被他的画布给遮住了。所以这个方案也没有能解决掉问题。

3.在surfaceView第一次生成的时候,用canvas给surfaceView手动绘制一层背景

结果:成功了,但是这种方法要注意的是只能在第一次生成surfaceview的时候去绘制,不然多次绘制,那么就会覆盖掉你原本要在surfaceview上绘制的内容了(我的项目中,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) { }
        });

有问题欢迎交流,欢迎指正。

你可能感兴趣的:(SurfaceView的背景设置相关问题)