Fragment中包含有surfaceView,点击切换Fragment时候黑屏的解决办法

问题描述:最近在做一个折线图,看了很多第三方的优秀折线图开源项目,例如:MpAndroidChart 等。。。,可是拿来看并不符合自己的需求,后来就自己学习写了一个自定义View折线图,继承surfaceView来实现坐标里面的数据滑动,surfaceView添加到fragment来显示,可是问题来了,点击切换fragment的时候,会出现大概1秒左右的黑屏。

原因【摘自网路】:

SurfaceView因为不同于一般的view,它有自己良好的缓冲以及数据存取机制,系统对他有特殊处理。当surfaceview第一次在当前activity上添加的时候,系统会给WindowManager重新排布局,relayout,这样就会黑一下,这个只会出现在第一次,以后再添加surfaceview时就不会黑屏了。

黑屏现象,有图有真相:
Fragment中包含有surfaceView,点击切换Fragment时候黑屏的解决办法_第1张图片
黑屏現象
解决办法:
  • 首先给自定义view设置背景颜色(因为我的自定义view继承了surfaceView),设置成和绘制坐标轴背景的一样颜色,我这里设置成白色,这样黑色闪屏不会出现了,当我改了背景颜色运行的时候,发现我绘制的内容会被背景颜色覆盖了,看不见了。
     添加背景颜色代码: 
setBackgroundColor(Color.argb(255,255,231,115));

 或者在xml文件中添加: 

android:background="#fff"
  • 接下来我们要解决覆盖绘制内容的问题
    • 在要显示Activity的OnCreate()方法里面添加以下代码:
 getWindow().setFormat(PixelFormat.TRANSLUCENT); 
  • 在自定义view里面添加以下代码:
      setZOrderOnTop(true);
      getHolder().setFormat(PixelFormat.TRANSPARENT); ```

** 这样问题就算解决了!**解决后的效果图如下:

![解決黑屏](http://upload-images.jianshu.io/upload_images/915812-53ae1c3f8237e47c.gif?imageMogr2/auto-orient/strip)

** ps:演示图录得有点差,不好意思哈,求各位推荐好的录演示图软件 **

参考文章:
[http://www.lxway.net/425221624.html](http://www.lxway.net/425221624.html)
[http://www.jb51.net/article/72719.htm](http://www.jb51.net/article/72719.htm)


你可能感兴趣的:(Fragment中包含有surfaceView,点击切换Fragment时候黑屏的解决办法)