图表引入(折线图、柱状图、饼状图)
引入
工程的build中:
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
项目的build中:
compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
使用
一、折线图
在xml中:
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:background="@android:color/holo_purple"> <com.github.mikephil.charting.charts.LineChart android:id="@+id/line_chart" android:layout_width="match_parent" android:layout_height="300dp"/> </LinearLayout>在activity中:
LineChart lineChart; //声明一个字体库 private Typeface mtf; @Override protected void initData() { mtf = Typeface.createFromAsset(getAssets(),"OpenSans-Regular.ttf"); //描述 lineChart.getDescription().setEnabled(false); Description des = new Description(); des.setText("123123"); lineChart.setDescription(des); //网格背景 lineChart.setDrawGridBackground(false); //当前的x轴对象 XAxis xAxis = lineChart.getXAxis(); //x轴显示位置 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //x轴的字体 xAxis.setTypeface(mtf); //x轴的网格线 xAxis.setDrawGridLines(false); //x轴的轴线 xAxis.setDrawAxisLine(true); //获取左边的y轴对象 YAxis leftAxis = lineChart.getAxisLeft(); //y轴的字体 leftAxis.setTypeface(mtf); //5:左边y轴的区间的个数 false:是否均匀分布 leftAxis.setLabelCount(5,false); leftAxis.setDrawGridLines(false); YAxis rightAxis = lineChart.getAxisRight(); rightAxis.setTypeface(mtf); rightAxis.setLabelCount(5,false); rightAxis.setDrawGridLines(false); //数据 LineData lineData = generateDataLine(1); lineChart.setData(lineData); lineChart.animateX(750); }
private LineData generateDataLine(int cnt) { //折线1 ArrayList<Entry> e1 = new ArrayList<Entry>(); //折线中的点 for (int i = 0; i < 12; i++) { e1.add(new Entry(i, (int) (Math.random() * 65) + 40)); } LineDataSet d1 = new LineDataSet(e1, "New DataSet " + cnt + ", (1)"); d1.setLineWidth(2.5f); d1.setCircleRadius(4.5f); d1.setHighLightColor(Color.rgb(244, 117, 117)); //是否显示小圆点上的数值 d1.setDrawValues(false); //折线2 ArrayList<Entry> e2 = new ArrayList<Entry>(); for (int i = 0; i < 12; i++) { e2.add(new Entry(i, e1.get(i).getY() - 30)); } LineDataSet d2 = new LineDataSet(e2, "New DataSet " + cnt + ", (2)"); d2.setLineWidth(2.5f); d2.setCircleRadius(4.5f); d2.setHighLightColor(Color.rgb(244, 117, 117)); d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setDrawValues(false); ArrayList<ILineDataSet> sets = new ArrayList<ILineDataSet>(); sets.add(d1); sets.add(d2); LineData cd = new LineData(sets); return cd; }
二、柱状图
在xml中:
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:background="@android:color/holo_purple"> <com.github.mikephil.charting.charts.BarChart android:id="@+id/bar_chart" android:layout_width="match_parent" android:layout_height="300dp"/> </LinearLayout>在activity中:
BarChart barChart; private Typeface mTf; @Override protected void initData() { mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf"); //描述 barChart.getDescription().setEnabled(false); barChart.setDrawGridBackground(false); barChart.setDrawBarShadow(false); XAxis xAxis = barChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setTypeface(mTf); xAxis.setDrawGridLines(false); xAxis.setDrawAxisLine(true); YAxis leftAxis = barChart.getAxisLeft(); leftAxis.setTypeface(mTf); leftAxis.setLabelCount(5, false); leftAxis.setSpaceTop(20f); leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) YAxis rightAxis = barChart.getAxisRight(); rightAxis.setTypeface(mTf); rightAxis.setLabelCount(5, false); rightAxis.setSpaceTop(20f); rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) BarData mChartData = generateDataBar(1); mChartData.setValueTypeface(mTf); // set data barChart.setData((BarData) mChartData); barChart.setFitBars(true); // do not forget to refresh the chart // holder.chart.invalidate(); barChart.animateY(700); }
private BarData generateDataBar(int cnt) { ArrayList<BarEntry> entries = new ArrayList<BarEntry>(); for (int i = 0; i < 12; i++) { entries.add(new BarEntry(i, (int) (Math.random() * 70) + 30)); } BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt); d.setColors(ColorTemplate.VORDIPLOM_COLORS); d.setHighLightAlpha(255); BarData cd = new BarData(d); cd.setBarWidth(0.9f); return cd; }
三、饼状图
在xml中:
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:background="@android:color/holo_purple"> <com.github.mikephil.charting.charts.PieChart android:id="@+id/pie_chart" android:layout_width="match_parent" android:layout_height="300dp"/> </LinearLayout>
在activity中
//声明一个字体库 private Typeface mTf; @Override protected void initData() { mTf = Typeface.createFromAsset(getAssets(),"OpenSans-Regular.ttf"); // apply styling pieChart.getDescription().setEnabled(false); pieChart.setHoleRadius(52f); pieChart.setTransparentCircleRadius(57f); pieChart.setCenterText("1234567890"); pieChart.setCenterTextTypeface(mTf); pieChart.setCenterTextSize(9f); pieChart.setUsePercentValues(true); pieChart.setExtraOffsets(5, 10, 50, 10); PieData mChartData = generateDataPie(1); mChartData.setValueFormatter(new PercentFormatter()); mChartData.setValueTypeface(mTf); mChartData.setValueTextSize(11f); mChartData.setValueTextColor(Color.WHITE); // set data pieChart.setData((PieData) mChartData); Legend l = pieChart.getLegend(); l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); l.setOrientation(Legend.LegendOrientation.VERTICAL); l.setDrawInside(false); l.setYEntrySpace(0f); l.setYOffset(0f); // do not forget to refresh the chart // holder.chart.invalidate(); pieChart.animateY(900); }
private PieData generateDataPie(int cnt) { ArrayList<PieEntry> entries = new ArrayList<PieEntry>(); for (int i = 0; i < 4; i++) { entries.add(new PieEntry((float) ((Math.random() * 70) + 30), "Quarter " + (i+1))); } PieDataSet d = new PieDataSet(entries, ""); // space between slices d.setSliceSpace(2f); d.setColors(ColorTemplate.VORDIPLOM_COLORS); PieData cd = new PieData(d); return cd; }
注:
1、使用的图标框架:
https://github.com/PhilJay/MPAndroidChart
2、“OpenSans-Regular.ttf”在上述的github中可以找到,然后放在assets中就可以使用了