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;
}
}