效果图如下:
微信截图_20210210215434.png
一、导入MPAndroidChart
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
二、布局中使用BarChart
<com.github.mikephil.charting.charts.BarChart
android:layout_width="match_parent"
android:layout_height="207dp"
android:id="@+id/chart"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="#ffffff"/>
三、设置图表样式
private void initChart() {
//不展示图表描述信息
barChart.getDescription().setEnabled(false);
//所有值均绘制在其条形顶部上方
barChart.setDrawValueAboveBar(false);
//纵坐标不显示网格线
barChart.getXAxis().setDrawGridLines(false);
//不支持图表缩放
barChart.setScaleEnabled(false);
//设置点击图表时的标记,可以自定义布局
barChart.setMarker(new MyMarkView(context);
// 改变y标签的位置
YAxis leftAxis = barChart.getAxisLeft();
leftAxis.setAxisMinimum(0f);
//右y轴不显示
barChart.getAxisRight().setEnabled(false);
//
leftAxis.setDrawAxisLine(false);
//获取x坐标轴
XAxis xLabels = barChart.getXAxis();
//设置x坐标轴显示位置在下方
xLabels.setPosition(XAxisPosition.BOTTOM);
//转换x坐标轴显示内容
xLabels.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return "";
}
});
//获取图表的图例
Legend l = barChart.getLegend();
//图例设置在下方
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
//图例设置在中间
l.setHorizontalAlignment(LegendHorizontalAlignment.CENTER);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
setChartData();
}
private void setChartData() {
ArrayList<BarEntry> yValues = new ArrayList<>();
//设置y轴显示的数据
for (int i = 0; i < 12; i++) {
//new BarEntry(float x, float[] vals),x:横坐标值,vals:y值列表
yValues.add(new BarEntry(i, new float[]{(float) (Math.random() * 12),
(float) (Math.random() * 12)}));
}
BarDataSet set1;
if (barChart.getData() != null &&
barChart.getData().getDataSetCount() > 0) {
set1 = (BarDataSet) barChart.getData().getDataSetByIndex(0);
set1.setValues(yValues);
barChart.getData().notifyDataChanged();
barChart.notifyDataSetChanged();
} else {
set1 = new BarDataSet(yValues, "");
//设置图例的颜色和名称
set1.setColors(new int[]{R.color.colorAccent, R.color.colorPrimary}, this);
set1.setStackLabels(new String[]{"数据1", "数据2"});
ArrayList<IBarDataSet> dataSets = new ArrayList<>();
dataSets.add(set1);
BarData data = new BarData(dataSets);
data.setValueTextColor(Color.WHITE);
barChart.setData(data);
}
barChart.setFitBars(true);
barChart.invalidate();
}
网友评论