好久沒有寫博客了,最近比較忙,項目中使用了MPAndroidChart,初次使用也比較蠢,很多API都得一個一個查,但有些時候當你想應該有這個API的時候他卻沒有,就比如今天的主角LimitLine 限制線,也叫基線。
這條綠色的線就是限制線。
基本使用方法就是:
LimitLine hightLimit = new LimitLine(high, name); hightLimit.setLineWidth(2f); //設置線寬 hightLimit.setTextSize(10f); //設置限制線上label字體大小 hightLimit.setLineColor(color); //設置線的顏色 hightLimit.setTextColor(color); //設置限制線上label字體的顏色 hightLimit.setLabelPosition(labelPosition);//標簽位置 if(isDashedLine){ hightLimit.enableDashedLine(5f,3f,0); //設置虛線 }else{ hightLimit.disableDashedLine(); } leftAxis.setDrawLimitLinesBehindData(true); //這個很神奇開始看源碼注釋我有點懵逼,啥意思?看下文解釋吧 leftAxis.removeAllLimitLines(); //先清除原來的線,后面再加上,防止add方法重復繪制 leftAxis.addLimitLine(hightLimit); mBarChart.invalidate();
這個LimitLine 他是根據你 坐標軸來的。
很多人可能會問了 這是什么意思?
來我們根據上面的一步步分析
一.坑一 —— 限制線的添加
限制線的添加有以下三種
1.xAxis (橫坐標)
2.leftAxis(左側縱坐標)
3.rightAxis(右側縱坐標)
我們上面的代碼中就是用的第2種,不管是哪種添加的方式都是一樣的,這里我們以上方代碼為例說明
leftAxis.addLimitLine(hightLimit); //添加
沒錯就是這么簡單就添加了。
問題:這當然是有坑的,這個坑就是我們的圖表有時候並不是不會刷新的,如果你長時間在這個頁面刷新數據,那么你就會重復添加限制線,那么你就會看到你的線不停的重疊。
解決方案:每次刷新前先移除上一個存在的限制線
比如這樣
leftAxis.removeLimitLine(LimitLine l)
如果你想偷懶還可以這樣,清楚所有添加的線
leftAxis.removeAllLimitLines(); //先清除原來的線,后面再加上,防止add方法重復繪制
二.坑二 —— 限制線值太大的看不到
對我們的目標太高了,哈哈,說笑而已,平常是不會有這么高的目標線的,但有些時候工廠的目標就是高啊,沒辦法,別人要看到差距啊,作為開發人員能說不不不嗎?顯然不能。那么開始看看吧
我們按照上面的代碼添加限制線,當然限制線的值設為500然后驚奇的發現 我們的目標線不宜而飛了....
哈哈,新手懵逼中,老手開始查找API中....真的可惜沒有關於限制API的方式給你,老手估計也開始另覓他發准備改動源碼了,但改源碼這個東西怎么說呢,生怕動一處壞全身。那么我們的問題就來了。
問題:限制線值太大的看不到,希望查看到限制線並體現出柱狀和目標的差距
解決方案:這個方法就是圍魏救趙,既然我們限制線沒有給你API那么我們就想想坐標能顯示出500那么限制線就應該能出來了吧,我們來看看有沒有設置坐標的API,很開心我們找到了 left.setAxisMaximum(500)
if(sStandard > maxNum) { //標准線過大的話 會圖上看不到標准線,那么我就做個假的數據目標線顯示出來,但讓顯示的數值是真實的值 mBinding.barChart.getAxisLeft().setAxisMaximum(sStandard + 10); }
歐克出來了