最近項目有這麼一個需求,實現一個柱狀圖,柱狀圖頂部爲圓角,底部不爲圓角。一開始接到這個需求,覺得會很
簡單,認爲github上面確定會有現成的圖表庫可使用。因此上github一搜,用上了MPAndroid。
複製代碼
一開始進展得很順利,MPAndroid也確實好用,直到寫完需求,準備去找找是否有設置圓角的方法,結果並無,沒有,沒有! 知道真相的我是崩潰的。只得上網找到另一個圖表庫——WilliamChart, 有了上次的經驗,此次我肯定了WilliamChart確實有設置圓角的方法。 萬萬沒想到,不隨人願,WilliamChart 只能設置含四個圓角的柱狀圖。我一度想要放棄,不過最後仍是本着耐心去研究WilliamChart,沒想到最後還真找到了解決方法。且聽我道來。git
另附github
首先看WillamChart自帶的demo的一種特殊圖表 StackBarChartView:bash
這種圖表的特色就是能夠填加多個數據集,並且是疊加的方式呈現的。就如上圖,是由三組數據組合而成的。一開始看到這個圖表的時候,我靈機一動,利用極限的想法,只要設置兩組數據,而且底部的數據只要接近0,這樣子底部的柱狀圖就是一個小色塊,利用這個小色塊和底部的柱狀圖銜接,這樣一來底部的色塊就能夠擋住底部柱狀圖下部分的圓角了。,從而就能夠「僞造」只有頂部帶圓角的柱狀圖了。
效果以下:post
而下圖是底部數據比較大的對比圖ui
明顯能夠看出若是沒有處理底部數據的話,柱狀圖四個角都爲圓角,比較不美觀。spa
float []topChartData = {26, 2, 4, 2, 10, 20, 20, 18, 10, 50, 32, 2, 4, 2, 10, 20, 20,18, 21, 5};
float []bottomChartData = new float[topChartData.length];
Arrays.fill(bottomChartData, 0.01f);
複製代碼
BarSet topBarSet = new BarSet();
int i;
for(i = 0;i < topChartData.length; i++) {
Bar bar = new Bar(i + "", topChartData[i]);
bar.setColor(Color.parseColor("#47b484"));
topBarSet.addBar(bar);
}
BarSet bottomBarSet = new BarSet();
for(i = 0;i < bottomChartData.length; i++) {
Bar bar = new Bar(i + "", bottomChartData[i]);
bar.setColor(Color.parseColor("#47b484"));
bottomBarSet.addBar(bar);
}
複製代碼
roundBarChart = (StackBarChartView) findViewById(R.id.round_barchart);
roundBarChart.addData(bottomBarSet); //先添加底部數據
roundBarChart.addData(topBarSet);
roundBarChart.setBarSpacing(Tools.fromDpToPx(10.0f)); //設置柱子的間隔
roundBarChart.setRoundCorners(Tools.fromDpToPx(2.0f)); //設置圓角的角度
// 去除X,Y軸
roundBarChart.setXAxis(false)
.setYAxis(false)
.setXLabels(XRenderer.LabelPosition.NONE)
.setYLabels(XRenderer.LabelPosition.NONE);
// 圖表展現
roundBarChart.show();
複製代碼
經過此次血的教訓,下次再實現項目需求的時候,必定會實現作好功課,畢竟即便是成熟的第三方庫,也不必定能知足咱們的實際要求。code
至於後來,經過一種自定義視圖的方式實現了這個需求,自定義視圖---圓角柱狀圖(一)cdn