版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Zhangshiting/article/details/83750547
AndroidMPChart的获取
依赖:
Project 的build.gradle文件中添加
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
然后在 module中的build,gradle 中添加
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
布局文件:
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/full_linchart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
初始化LineChart:
//初始化数据对象
lineData = new LineData();
//清除原有的设置
lineChart.clear();
//设置曲线图的数据
lineChart.setData(lineData);
// 如果没有数据的时候,会显示这个
lineChart.setNoDataText("无数据");
//无数据时的文本颜色
lineChart.setNoDataTextColor(Color.parseColor("#000000"));
//设置是否缩放
lineChart.setScaleEnabled(false);
//是否在折线图上添加边框,false也会有一个淡色的矩形边框
lineChart.setDrawBorders(true);
//设置是否需要画网格
lineChart.setDrawGridBackground(false);
//设置放大图表后是否可以拖拽
lineChart.setDragEnabled(true);
//不显示边框
lineChart.setDrawBorders(false);
//不显示描述
lineChart.getDescription().setEnabled(false);
// 设置比例图标示 legend:图例,说明
Legend mLegend = lineChart.getLegend();
// 图例样式
mLegend.setForm(Legend.LegendForm.NONE);
// 字体大小
mLegend.setFormSize(14f);
// 字体颜色
mLegend.setTextColor(Color.BLACK);
//是否换行
mLegend.setWordWrapEnabled(true);
//显示图例位置
//垂直时的位置
mLegend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
//平行时的位置
mLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
//方向
mLegend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
// 字体样式
mLegend.setTypeface(Typeface.DEFAULT);
// 这里其实就是绘制折线的动画,接收的是一个时间毫秒值
lineChart.animateX(2000);
//描述, lineChart.getDescription().setEnabled(true)为true时显示
Description description = new Description();
//设置描述文本
description.setText("文本");
//设置文本颜色
description.setTextColor(Color.BLACK);
//设置文本字体大小
description.setTextSize(11f);
//设置y轴偏移
description.setYOffset(-30);
// 设置是否显示
description.setEnabled(true);
//设置曲线的描述
lineChart.setDescription(description);
/**
* 设置X轴
* * */
//获取x轴
XAxis xAxis = lineChart.getXAxis();
//设置x轴位置
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//是否显示X坐标轴上的刻度竖线,默认是true
xAxis.setDrawGridLines(false);
//设置为true当一个页面显示条目过多,X轴值隔一个显示一个
xAxis.setGranularityEnabled(true);
//设置最小间隔,防止当放大时,出现重复标签。
xAxis.setGranularity(1f);
//设置滑动
//一个界面最少显示多少个点
lineChart.setVisibleXRangeMinimum(0);
//一个界面最大显示多少个点,其余滑动显示
lineChart.setVisibleXRangeMaximum(6);
//第一个参数是X轴坐标的个数,第二个参数是 是否不均匀分布,true是不均匀分布
xAxis.setLabelCount(2, true);
//是否绘制坐标轴的线,即含有坐标的那条线,默认是true
xAxis.setDrawAxisLine(false);
//自定义x轴的点标签
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return "";
}
});
/**
*
* 设置左侧Y轴
* */
//获取左Y轴
YAxis leftAxis = lineChart.getAxisLeft();
//获取右y轴
YAxis rightAxis = lineChart.getAxisRight();
//保证Y轴从0开始,不然会上移一点
leftAxis.setAxisMinimum(0f);
//设置Y轴显示最大标签数
leftAxis.setAxisMaximum(6);
//设置显示右y轴
rightAxis.setEnabled(false);
//第一个参数是Y轴坐标的个数,第二个参数是 是否不均匀分布,true是不均匀分布
leftAxis.setLabelCount(yLableCount, false);
//是否绘制坐标轴的线,即含有坐标的那条线,默认是true
leftAxis.setDrawAxisLine(false);
//设置为true当一个页面显示条目过多,X轴值隔一个显示一个
leftAxis.setGranularityEnabled(true);
//设置最小间隔,防止当放大时,出现重复标签。
leftAxis.setGranularity(1f);
//限制线 第一个参数:限制大小 第二个参数:限制线标签
LimitLine limitLine = new LimitLine(42f, "压力上限 42");
//限制线颜色
limitLine.setLineColor(Color.parseColor("#f31818"));
//限制线宽度
limitLine.setLineWidth(1);
//左y轴添加限制线
leftAxis.addLimitLine(limitLine);
//多条添加
LimitLine limitLine1 = new LimitLine(28f, "压力下限 28");
limitLine1.setLineColor(Color.parseColor("#f31818"));
limitLine1.setLineWidth(1);
leftAxis.addLimitLine(limitLine1);
设置数据:
//x,y轴,泛型为Entry的集合
ArrayList<Entry> Values = new ArrayList<Entry>();
for (int i = 0; i < list.size(); i++) {
VtDateValueBean vtDateValueBean = list.get(i);
float preValue = Float.parseFloat(vtDateValueBean.getPreValue());
Values.add(new Entry(i, preValue)); //i是x轴的数据,yvalue是y轴的数据
}
//把数据封装成LineDataSet,
LineDataSet lineDataSet = new LineDataSet(Values, "曲线图" /*显示在比例图上*/);
lineDataSet.setLineWidth(1f); // 线宽,折线的线宽
lineDataSet.setColor(Color.parseColor("#4BC1FD"));//折线的颜色
lineDataSet.setDrawCircles(true);//图表上的数据点是否用小圆圈表示
lineDataSet.setCircleSize(2f); // x,y交点处显示的圆形大小
lineDataSet.setCircleColor(Color.BLACK); //折线上的圆形的颜色
lineDataSet.setDrawCircleHole(true);//是否是空心圆
lineDataSet.setHighlightEnabled(true);//是否高亮显示
lineDataSet.setDrawValues(true);//是否在点上绘制values
lineDataSet.setValueTextColors(colorlist);//设置点上value的颜色,颜色集合(设置不同颜色)
lineDataSet.setValueTextColor(Color.BLACK);//设置统一颜色
lineDataSet.setValueTextSize(13f);//设置点上value大小
//修改数据格式
lineDataSet.setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
DecimalFormat fnum = new DecimalFormat("##0.00");
return fnum.format(value);
}
});
lineData.addDataSet(lineDataSet);//添加折线