很久沒有寫博客了,最近比較忙,項目中使用了MPAndroidChart,初次使用也比較蠢,不少API都得一個一個查,但有些時候當你想應該有這個API的時候他卻沒有,就好比今天的主角LimitLine 限制線,也叫基線。字體
這條綠色的線就是限制線。spa
基本使用方法就是:code
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 他是根據你 座標軸來的。
blog
不少人可能會問了 這是什麼意思?開發
來咱們根據上面的一步步分析rem
一.坑一 —— 限制線的添加get
限制線的添加有如下三種 源碼
1.xAxis (橫座標) 博客
2.leftAxis(左側縱座標) it
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); }
歐克出來了