效果图以下:
本图使用AndroidMPChart制做,要使用AndroidMPChart,首先要添加远程依赖,或者将AndroidMPChart的jar包导入到AndroidStudio中。java
这里我就介绍一下如何添加远程依赖。android
一、 在Project目录下的build.gradle中添加以下所示的代码:git
allprojects { repositories { google() jcenter() maven { url "https://jitpack.io" } } }
二、在app目录下的build.gradle中的dependencies闭包下添加以下代码:github
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'
绘制柱状图的思路以下:web
直接上代码,以下所示:闭包
xml布局代码:app
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="50dp"> <com.github.mikephil.charting.charts.BarChart android:id="@+id/bar_chart1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
java代码:maven
public class BarChart1Activity extends AppCompatActivity { private BarChart barChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 去除状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_bar_chart1); initBarChart(); } private void initBarChart() { barChart = findViewById(R.id.bar_chart1); barChart.getDescription().setEnabled(false); // 不显示描述 barChart.setExtraOffsets(20, 20, 20, 20); // 设置饼图的偏移量,相似于内边距 ,设置视图窗口大小 setAxis(); // 设置坐标轴 setLegend(); // 设置图例 setData(); // 设置数据 } private void setData() { List<IBarDataSet> sets = new ArrayList<>(); // 此处有两个DataSet,因此有两条柱子,BarEntry()中的x和y分别表示显示的位置和高度 // x是横坐标,表示位置,y是纵坐标,表示高度 List<BarEntry> barEntries1 = new ArrayList<>(); barEntries1.add(new BarEntry(0, 390f)); barEntries1.add(new BarEntry(1, 1100f)); barEntries1.add(new BarEntry(2, 900f)); barEntries1.add(new BarEntry(3, 700f)); barEntries1.add(new BarEntry(4, 300f)); BarDataSet barDataSet1 = new BarDataSet(barEntries1, ""); barDataSet1.setValueTextColor(Color.RED); // 值的颜色 barDataSet1.setValueTextSize(15f); // 值的大小 barDataSet1.setColor(Color.parseColor("#1AE61A")); // 柱子的颜色 barDataSet1.setLabel("蔬菜"); // 设置标签以后,图例的内容默认会以设置的标签显示 // 设置柱子上数据显示的格式 barDataSet1.setValueFormatter(new IValueFormatter() { @Override public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { // 此处的value默认保存一位小数 return value + "斤"; } }); sets.add(barDataSet1); List<BarEntry> barEntries2 = new ArrayList<>(); barEntries2.add(new BarEntry(0, 210f)); barEntries2.add(new BarEntry(1, 450f)); barEntries2.add(new BarEntry(2, 430f)); barEntries2.add(new BarEntry(3, 440f)); barEntries2.add(new BarEntry(4, 180f)); BarDataSet barDataSet2 = new BarDataSet(barEntries2, ""); // 不显示第二根柱子上的值 barDataSet2.setDrawValues(false); // 不显示值 barDataSet2.setColor(Color.parseColor("#F7F709")); barDataSet2.setLabel("水果"); sets.add(barDataSet2); BarData barData = new BarData(sets); barData.setBarWidth(0.4f); // 设置柱子的宽度 barChart.setData(barData); } private void setLegend() { Legend legend = barChart.getLegend(); legend.setFormSize(12f); // 图例的图形大小 legend.setTextSize(15f); // 图例的文字大小 legend.setDrawInside(true); // 设置图例在图中 legend.setOrientation(Legend.LegendOrientation.VERTICAL); // 图例的方向为垂直 legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); //显示位置,水平右对齐 legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); // 显示位置,垂直上对齐 // 设置水平与垂直方向的偏移量 legend.setYOffset(55f); legend.setXOffset(30f); } private void setAxis() { // 设置x轴 XAxis xAxis = barChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置x轴显示在下方,默认在上方 xAxis.setDrawGridLines(false); // 将此设置为true,绘制该轴的网格线。 xAxis.setLabelCount(5); // 设置x轴上的标签个数 xAxis.setTextSize(15f); // x轴上标签的大小 final String labelName[] = {"周一", "周二", "周三", "周四", "周五"}; // 设置x轴显示的值的格式 xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { if ((int) value < labelName.length) { return labelName[(int) value]; } else { return ""; } } }); xAxis.setYOffset(15); // 设置标签对x轴的偏移量,垂直方向 // 设置y轴,y轴有两条,分别为左和右 YAxis yAxis_right = barChart.getAxisRight(); yAxis_right.setAxisMaximum(1200f); // 设置y轴的最大值 yAxis_right.setAxisMinimum(0f); // 设置y轴的最小值 yAxis_right.setEnabled(false); // 不显示右边的y轴 YAxis yAxis_left = barChart.getAxisLeft(); yAxis_left.setAxisMaximum(1200f); yAxis_left.setAxisMinimum(0f); yAxis_left.setTextSize(15f); // 设置y轴的标签大小 } }