Android studio利用MPAndroidChart制作简单柱形图

mac2024-03-23  27

1.在项目的build.gradle的allprojects添加 maven { url “https://jitpack.io” }

allprojects { repositories { google() jcenter() maven { url "https://jitpack.io" } } }

2.在app的build.gradle添加依赖。

implementation 'com.github.PhilJay:MPAndroidChart:v3.0.0-beta1'

3.activity_main.xml布局页面。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent"> <com.github.mikephil.charting.charts.BarChart android:id="@+id/bar_chart" android:layout_width="500dp" android:layout_height="300dp" /> </LinearLayout>

3.MainActivity.java部分。

package com.example.a86156.zhuxingtu; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.data.BarData; import com.github.mikephil.charting.data.BarDataSet; import com.github.mikephil.charting.data.BarEntry; import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; import com.github.mikephil.charting.interfaces.datasets.IDataSet; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { BarChart barChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); barChart = findViewById(R.id.bar_chart); initBarChart1(); } private void initBarChart1() { barChart.setDrawValueAboveBar(true); //设置所有的数值在图形的上面,而不是图形上 barChart.setTouchEnabled(false); //进制触控 barChart.setScaleEnabled(false); //设置能否缩放 barChart.setPinchZoom(false); //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放 barChart.setDrawBarShadow(false); //设置阴影 barChart.setDrawGridBackground(false); //设置背景是否网格显示 barChart.setDescription(""); //不描述 //X轴的数据格式 XAxis xAxis = barChart.getXAxis(); xAxis.setValueFormatter(new MyFormatter()); //设置位置 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //设置是否绘制网格线 xAxis.setDrawGridLines(false); barChart.getAxisLeft().setDrawGridLines(false); // barChart.animateY(2500); //设置X轴文字剧中对齐 xAxis.setCenterAxisLabels(false); //X轴最小间距 xAxis.setGranularity(1f); //Y轴的数据格式 YAxis axisLeft = barChart.getAxisLeft(); axisLeft.setValueFormatter(new MyFormatter2()); barChart.animateY(2500); //设置Y轴刻度的最大值 axisLeft.setAxisMinValue(0); axisLeft.setAxisMaxValue(100); barChart.getAxisRight().setEnabled(false); //设置数据 setData01(); } //日对比的数据 private void setData01() { ArrayList<BarEntry> yVals1 = new ArrayList<>(); yVals1.add(new BarEntry(1, 36)); yVals1.add(new BarEntry(2, 85)); yVals1.add(new BarEntry(3, 20)); yVals1.add(new BarEntry(4, 66)); yVals1.add(new BarEntry(5, 32)); yVals1.add(new BarEntry(6, 25)); yVals1.add(new BarEntry(7, 56)); BarDataSet set1; set1 = new BarDataSet(yVals1, ""); //设置多彩 也可以单一颜色 set1.setColor(Color.parseColor("#4169E1")); set1.setDrawValues(false); ArrayList<IBarDataSet> dataSets = new ArrayList<>(); dataSets.add(set1); BarData data = new BarData(dataSets); barChart.setData(data); barChart.setFitBars(true); //设置文字的大小 set1.setValueTextSize(12f); //设置每条柱子的宽度 data.setBarWidth(0.7f); barChart.invalidate(); for (IDataSet set : barChart.getData().getDataSets()) set.setDrawValues(!set.isDrawValuesEnabled()); barChart.invalidate(); barChart.setAutoScaleMinMaxEnabled(!barChart.isAutoScaleMinMaxEnabled()); barChart.notifyDataSetChanged(); barChart.invalidate(); } }

3.如果要改变x轴下面的数据描述格式,则需要再定义一个类MyFormatter并实现AxisValueFormatter这个接口。

package com.example.a86156.zhuxingtu; import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.formatter.AxisValueFormatter; import java.text.DecimalFormat; public class MyFormatter implements AxisValueFormatter { private DecimalFormat mFormat; String[] strings; public MyFormatter() { //格式化数字 mFormat = new DecimalFormat("###,###,##0.0"); } public MyFormatter(String[] strings) { this.strings = strings; } @Override public String getFormattedValue(float value, AxisBase axis) { if (value == 1) { return "周一"; } if (value == 2) { return "周二"; } if (value == 3) { return "周三"; } if (value == 4) { return "周四"; } if (value == 5) { return "周五"; } if (value == 6) { return "周六"; } if (value == 7) { return "周日"; } return ""; } @Override public int getDecimalDigits() { return 0; } }

4.如果要改变y轴左侧的数据描述格式,则需要再定义一个类MyFormatter2并实现AxisValueFormatter这个接口。

package com.example.a86156.zhuxingtu; import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.formatter.AxisValueFormatter; import java.text.DecimalFormat; public class MyFormatter2 implements AxisValueFormatter { private DecimalFormat mFormat; public MyFormatter2() { //格式化数字 mFormat = new DecimalFormat("###,###,##0.0"); } @Override public String getFormattedValue(float value, AxisBase axis) { return mFormat.format(value) + " %"; } @Override public int getDecimalDigits() { return 0; } }
最新回复(0)