問題描述:最近在做一個(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í)候,會(huì)出現(xiàn)大概1秒左右的黑屏两疚。
原因【摘自網(wǎng)路】:
SurfaceView因?yàn)椴煌谝话愕膙iew床估,它有自己良好的緩沖以及數(shù)據(jù)存取機(jī)制,系統(tǒng)對(duì)他有特殊處理诱渤。當(dāng)surfaceview第一次在當(dāng)前activity上添加的時(shí)候丐巫,系統(tǒng)會(huì)給WindowManager重新排布局,relayout勺美,這樣就會(huì)黑一下递胧,這個(gè)只會(huì)出現(xiàn)在第一次,以后再添加surfaceview時(shí)就不會(huì)黑屏了赡茸。
黑屏現(xiàn)象缎脾,有圖有真相:
解決辦法:
- 首先給自定義view設(shè)置背景顏色(因?yàn)槲业淖远xview繼承了surfaceView),設(shè)置成和繪制坐標(biāo)軸背景的一樣顏色坛掠,我這里設(shè)置成白色赊锚,這樣黑色閃屏不會(huì)出現(xiàn)了,當(dāng)我改了背景顏色運(yùn)行的時(shí)候屉栓,發(fā)現(xiàn)我繪制的內(nèi)容會(huì)被背景顏色覆蓋了舷蒲,看不見了。
添加背景顏色代碼:
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)