Fragment中包含有surfaceView,點(diǎn)擊切換Fragment時(shí)候黑屏的解決辦法

問題描述:最近在做一個(gè)折線圖,看了很多第三方的優(yōu)秀折線圖開源項(xiàng)目,例如:MpAndroidChart 等。。。,可是拿來看并不符合自己的需求,后來就自己學(xué)習(xí)寫了一個(gè)自定義View折線圖,繼承surfaceView來實(shí)現(xiàn)坐標(biāo)里面的數(shù)據(jù)滑動(dòng),surfaceView添加到fragment來顯示,可是問題來了,點(diǎn)擊切換fragment的時(shí)候,會出現(xiàn)大概1秒左右的黑屏。

原因【摘自網(wǎng)路】:

SurfaceView因?yàn)椴煌谝话愕膙iew,它有自己良好的緩沖以及數(shù)據(jù)存取機(jī)制,系統(tǒng)對他有特殊處理。當(dāng)surfaceview第一次在當(dāng)前activity上添加的時(shí)候,系統(tǒng)會給WindowManager重新排布局,relayout,這樣就會黑一下,這個(gè)只會出現(xiàn)在第一次,以后再添加surfaceview時(shí)就不會黑屏了。

黑屏現(xiàn)象,有圖有真相:
黑屏現(xiàn)象
解決辦法:
  • 首先給自定義view設(shè)置背景顏色(因?yàn)槲业淖远xview繼承了surfaceView),設(shè)置成和繪制坐標(biāo)軸背景的一樣顏色,我這里設(shè)置成白色,這樣黑色閃屏不會出現(xiàn)了,當(dāng)我改了背景顏色運(yùn)行的時(shí)候,發(fā)現(xiàn)我繪制的內(nèi)容會被背景顏色覆蓋了,看不見了。
     添加背景顏色代碼: 
setBackgroundColor(Color.argb(255,255,231,115));

 或者在xml文件中添加: 

android:background="#fff"
  • 接下來我們要解決覆蓋繪制內(nèi)容的問題
    • 在要顯示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:演示圖錄得有點(diǎn)差,不好意思哈,求各位推薦好的錄演示圖軟件 **

參考文章:
[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)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容