問題描述:最近在做一個折線圖,看了很多第三方的優秀折線圖開源項目,例如: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); ```
** 這樣問題就算解決了!**解決后的效果圖如下:

** 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)