Android MPChart—柱狀圖
阿新 • • 發佈:2018-12-12
第三方資源庫MPChart如何新增到專案中就不說了,不知道的網上搜一下,很多。
本篇主要說明MPChart中BarChart(柱狀圖)是如何呼叫實現的。
一、佈局檔案
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/barchart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
二、BarChartActivity
public class BarChartActivity extends AppCompatActivity { private BarChart barchart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bar_chart); barchart = findViewById(R.id.barChart); barchart.setDrawBarShadow(false);//true繪畫的Bar有陰影。 barchart.setDrawValueAboveBar(true);//true文字繪畫在bar上 barchart.getDescription().setEnabled(false); barchart.setMaxVisibleValueCount(60); barchart.setPinchZoom(false);//false只能單軸縮放 barchart.setDrawGridBackground(false); //x座標軸設定 xAxisValue.clear(); xAxisValue.add("1月"); xAxisValue.add("2月"); xAxisValue.add("3月"); xAxisValue.add("4月"); xAxisValue.add("5月"); xAxisValue.add("6月"); XAxis xAxis = barchart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawGridLines(false); xAxis.setDrawLabels(true); xAxis.setGranularity(1f); xAxis.setLabelCount(xAxisValue.size()); xAxis.setCenterAxisLabels(true);//設定標籤居中 xAxis.setValueFormatter(new IndexAxisValueFormatter(xAxisValue)); //設定Y軸 barchart.getAxisRight().setEnabled(false); YAxis leftAxis = barchart.getAxisLeft(); leftAxis.setLabelCount(6, false); // leftAxis.setValueFormatter(); leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART); leftAxis.setSpaceTop(10f); leftAxis.setAxisMinimum(0f); leftAxis.setAxisMaximum(50f); Legend l = barchart.getLegend(); l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); l.setOrientation(Legend.LegendOrientation.HORIZONTAL); l.setDrawInside(false); l.setForm(Legend.LegendForm.SQUARE); l.setFormSize(9f); l.setTextSize(11f); l.setXEntrySpace(4f); // XYMarkerView mv = new XYMarkerView(this, xAxisFormatter); // mv.setChartView(barchart); // For bounds control // barchart.setMarker(mv); // Set the marker to the chart setData(6, 50); } private void setData(int count, float range) { float start = 1f; ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>(); ArrayList<BarEntry> yVals2 = new ArrayList<BarEntry>(); for (int i = (int) start; i < start + count; i++) { float mult = (range + 1); float val = (float) (Math.random() * mult); float val2 = (float) (Math.random() * mult); yVals1.add(new BarEntry(i, val)); yVals2.add(new BarEntry(i, val2)); } BarDataSet set1 = new BarDataSet(yVals1, "資料說明1"); set1.setDrawIcons(false); set1.setColor(ColorTemplate.rgb("#2ecc71")); BarDataSet set2 = new BarDataSet(yVals2, "資料說明2"); set2.setDrawIcons(false); set2.setColor(ColorTemplate.rgb("#f1c40f")); ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>(); dataSets.add(set1); dataSets.add(set2); BarData data = new BarData(dataSets); data.setValueTextSize(10f); barchart.setData(data); float groupSpace = 0.2f; float barSpace = 0.1f; barchart.getBarData().setBarWidth(0.3f); barchart.getXAxis().setAxisMinimum(0); barchart.getXAxis().setAxisMaximum(barchart.getBarData().getGroupWidth(groupSpace, barSpace) * xAxisValue.size() + 0); barchart.groupBars(0, groupSpace, barSpace); barchart.animateY(1000, Easing.Linear); barchart.animateX(1000, Easing.Linear); } }
至於裡面BarChart的屬性方法是什麼意思,註釋加了一些,另外的大家可以自行百度。