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

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

原因【摘自网路】:

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

黑屏现象,有图有真相:
黑屏現象
解决办法:
  • 首先给自定义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)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,341评论 25 709
  • 在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享...
    一个不掉头发的开发阅读 13,916评论 12 74
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,698评论 4 61
  • 校园是祖国呵护花朵的温室。不是殴斗事件的野湖。 近年来校园殴斗事件频发,不免让很多家长忧心忡忡。许多校园暴力新闻,...
    遨游于天际阅读 1,864评论 0 5
  • 他在佛前磕长头祈愿,为来生再续未了缘。 她在佛前焚心香祷告,为来世不要再相见。 佛笑观世间百态,静默无声。 他们的...
    和煦子阅读 4,367评论 0 4

友情链接更多精彩内容