解决SurfaceView显示黑屏的问题

2018-02-25  本文已影响64人  满天星爱我

在网上查了好多资料,大部分的回答都是设置这两行代码:

  holder.setZOrderOnTop(true);
  holder.setFormat(PixelFormat.TRANSPARENT);

但是这样会有一个很麻烦的问题,就是会遮挡布局中的控件,显然这样是会影响用户的,最终我找到一种方法可以完美的解决这个问题,不需要设置上面那两行代码,就是在SurfaceHoleder创建成功后,也就是在如下方法中:

   @Override
   public void surfaceCreated(SurfaceHolder holder){
   //SurfaceHolder在创建值钱 默认是黑色的,所以创建后再去设置画布Canvas的背景色
   canvas = mHolder.lockCanvas();
   if (canvas == null) return;
      canvas.drawColor(Color.WHITE);
      mHolder.unlockCanvasAndPost(canvas);
  }

去设置Canvas的背景色,然后在你开启线程绘制画面的时候也要设置canvas背景色为白色(当然背景色也不一定是白色,根据自己的需求去设置)

注意:不要设置canvas的mode为Mode.CLEAR,这样SurfaceView背景就又变成默认的黑色了

上一篇 下一篇

猜你喜欢

热点阅读