首先在项目的build.gradle文件下添加如下:
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
然后在相应的module的build.gradle下添加依赖:
dependencies {
compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
}
1.将MPAndroidChart设置为左右滑动的样式
Matrix matrix = new Matrix(); //x轴缩放1.5倍 matrix.postScale(1.5f, 1f); //在图表动画显示之前进行缩放 chart.getViewPortHandler().refresh(matrix, chart, false); // x轴执行动画 chart.animateX(2000);
2.下标数目
//下标数目 xAxis.setLabelCount(2);
其他属性
setEnabled(boolean enabled): //是否启用轴,如果禁用,关于轴的设置所有属性都将被忽略
setDrawLabels(boolean enabled):// 是否绘制标签
setDrawAxisLine(boolean enabled):// 是否绘制轴线
setDrawGridLines(boolean enabled)://是否和网格轴线
setAxisLineWidth(float f)://设置轴线的宽度
setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);//设置轴的值显示的位置
setAxisMinValue(float min): //设置轴的最小值。这样设置将不会根据提供的数据自动计算。
setGranularity(float gran)://设置Y轴最小间隔
setShowOnlyMinMax(boolean enabled)://如果启用,此轴直线式最大值和最小值架构忽略定义的标签数。
setLabelCount(int count, boolean force): //设置轴的标签数目,不是精确值,如果强制设置,可能导致轴线不均匀
setInverted(boolean enabled): //反转该轴,如果为true,最大值在底部,顶部是最小值。
setSpaceTop(float percent): //设置轴上最高位置在表中最高位置的顶部间距,占总轴的百分比。
setSpaceBottom(float percent): //设置轴上最低位置在表中最低位置的底部间距,占总轴的百分比。
setAvoidFirstLastClipping(boolean enabled)://如果设置为true,将避免图表或屏幕的边缘的第一个和最后一个轴中的标签条目被裁剪。
setSpaceBetweenLabels(int characters)://设置应该x轴标签之间的被排除在外字符,默认空间:4。
enableGridDashedLine(float lineLength, float spaceLength, float phase): //使网格线在虚线画模式,lineLength控制线长度 , spaceLength控制线之间空格长度, phase 控制起点
setDragScaleEnabled(boolean enabled): //设置是否可以拖拽,缩放
setHighlightEnabled(boolean enabled) ://设置点击value的时候,是否高亮显示
setBackgroundColor(int color): //设置整个图表视图的背景
setDescription(String desc): //右下角对图表的描述信息
setDescriptionColor(int color): //描述信息的颜色
setDescriptionPosition(float x, float y): //自定义描述信息位置.
setDescriptionTypeface(Typeface t): //自定义描述信息字体
setDescriptionTextSize(float size): //自定义描述信息字体大小, 最小值6f, 最大值16f.
setNoDataText(String desc): //设置空表的描述信息
setDrawGridBackground(boolean enabled): //是否绘制网格背景
setGridBackgroundColor(int color): //设置网格背景颜色
setDrawBorders(boolean enabled): //是否绘制边线
setBorderColor(int color)://边线颜色
setBorderWidth(float width)://边线宽度,单位dp
setMaxVisibleValueCount(int count): //设置图表绘制可见标签数量最大值. 仅在setDrawValues() 启用时生效
setMinOffset(float dp);//设置填充属性,类似与padding的效果
setScaleEnabled(false);//禁止缩放
setTouchEnabled(boolean b);//设置是否可以触摸,注意:设置false后,点击事件不再生效,也没有高亮的显示了
setValueTypeface(Typeface t)://设置字体
dataSet.setDrawValues(boolean)//是dataSet的属性,设置是否在图上显示出当前点(柱状图)的值
x轴格式化值
setValueFormatter(XAxisValueFormatter formatter):在绘制之前,动态的设置自定义格式.
public class StringAxisValueFormatter implements IAxisValueFormatter {
private List xValues;
public StringAxisValueFormatter(List xValues) {
this.xValues = xValues;
}
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
if (v < 0 || v > (xValues.size() - 1)){//使得两侧柱子完全显示
return "";
}
return xValues.get((int)v);
}
}
或者
public class MyValueFormatter implements ValueFormatter {
private DecimalFormat mFormat;
public MyValueFormatter() {
mFormat = new DecimalFormat("###,###,##0.0"); // use one decimal
}
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
// write your logic here
return mFormat.format(value) + " $"; // e.g. append a dollar-sign
}
}
使用
// usage on whole data object
lineData.setValueFormatter(new MyValueFormatter());
// usage on individual dataset object
lineDataSet.setValueFormatter(new MyValueFormatter());
设置点击事件
chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry e, Highlight h) {
Log.e("---->",e.getX()+" "+e.getY());
}
@Override
public void onNothingSelected() {
}
});
一般用到
public static LineChart initChart(LineChart chart,Context context) { //提示 MyMarkerView mv = new MyMarkerView(context, R.layout.custom_marker_view); mv.setChartView(chart); // For bounds control chart.setMarker(mv); // 不显示数据描述 chart.getDescription().setEnabled(false); // 没有数据的时候,显示“暂无数据” chart.setNoDataText("暂无数据"); // 不显示表格颜色 chart.setDrawGridBackground(false); // 可以缩放 chart.setScaleEnabled(true); // 不显示y轴右边的值 chart.getAxisRight().setEnabled(false); chart.setTouchEnabled(true); // 不显示图例 Legend legend = chart.getLegend(); legend.setEnabled(false); // 向左偏移15dp,抵消y轴向右偏移的30dp chart.setExtraLeftOffset(-15); XAxis xAxis = chart.getXAxis(); // 不显示x轴 xAxis.setDrawAxisLine(false); // 设置x轴数据的位置 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setTextColor(Color.WHITE); xAxis.setTextSize(12); xAxis.setGridColor(Color.parseColor("#30FFFFFF")); // 设置x轴数据偏移量 xAxis.setYOffset(-12); //下标数目 xAxis.setLabelCount(6); YAxis yAxis = chart.getAxisLeft(); // 不显示y轴 yAxis.setDrawAxisLine(false); // 设置y轴数据的位置 yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART); // 不从y轴发出横向直线 yAxis.setDrawGridLines(false); yAxis.setTextColor(Color.WHITE); yAxis.setTextSize(12); // 设置y轴数据偏移量 yAxis.setXOffset(30); yAxis.setYOffset(-3); yAxis.setAxisMinimum(0); Matrix matrix = new Matrix(); //x轴缩放1.5倍 matrix.postScale(1.5f, 1f); //在图表动画显示之前进行缩放 chart.getViewPortHandler().refresh(matrix, chart, false); // x轴执行动画 chart.animateX(2000); chart.invalidate(); return chart; }
public static void setChartData(LineChart chart, Listvalues) { LineDataSet lineDataSet; if (chart.getData() != null && chart.getData().getDataSetCount() > 0) { lineDataSet = (LineDataSet) chart.getData().getDataSetByIndex(0); lineDataSet.setValues(values); chart.getData().notifyDataChanged(); chart.notifyDataSetChanged(); } else { lineDataSet = new LineDataSet(values, ""); // 设置曲线颜色 lineDataSet.setColor(Color.parseColor("#FFFFFF")); // 设置平滑曲线 lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); // 不显示坐标点的小圆点 lineDataSet.setDrawCircles(false); // 不显示坐标点的数据 lineDataSet.setDrawValues(false); // 不显示定位线 lineDataSet.setHighlightEnabled(false); LineData data = new LineData(lineDataSet); chart.setData(data); chart.invalidate(); } }