* 注意:*测试版本:com.github.PhilJay:MPAndroidChart:v3.0.2
1.linechart使用
设置:
chart.setDescription(null);//去除Description
chart.setDragEnabled(true);//设置可以拖动
chart.setDragDecelerationEnabled(true);//拖动减速
chart.setDoubleTapToZoomEnabled(false);//取消双击缩放
chart.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.appbgcolor));//背景颜色
chart.setScaleYEnabled(false);//1取消y轴缩放
chart.setDragDecelerationFrictionCoef(0.9f);//拖动降速速率
chart.getAxisRight().setEnabled(false);//取消右边y轴
chart.getAxisLeft().setTextSize(10);//y轴字体大小
chart.getAxisLeft().setMinWidth(0f);//左边y轴最小值
chart.getAxisLeft().setAxisLineColor(Color.parseColor("#00ffffff"));//y轴线颜色
chart.getAxisLeft().setGridColor(Color.parseColor("#06253a"));//网格颜色
chart.getAxisLeft().setTextColor(Color.parseColor("#65859a"));//y轴字体颜色
chart.getAxisLeft().setDrawLimitLinesBehindData(true);//设置限制线
chart.getXAxis().setTextColor(Color.parseColor("#65859a"));//x轴字体颜色
chart.getXAxis().setAxisLineWidth(0);//x轴线宽度
chart.getXAxis().setDrawGridLines(false);//取消x轴网格
chart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴在底部显示
chart.getXAxis().setTextSize(10);//x轴字体大小
chart.getXAxis().setCenterAxisLabels(false);//使x轴显示文字居中
chart.getXAxis().setGranularityEnabled(false);//x轴文字单个显示
chart.getXAxis().setAxisLineColor(Color.parseColor("#00ffffff"));//x轴线颜色
chart.getXAxis().setYOffset(0);//x轴偏移量
chart.getLegend().setEnabled(false);
添加数据:
private void initChartData(LineChart chart) {
//每个点的坐标,自己随便搞点(x,y)坐标就可以了
List<Entry> pointValues = new ArrayList<>();
for (int i = 1; i < 19; i++) {
int y = (int) (Math.random() * 20);
pointValues.add(new Entry(i, y));
}
//点构成的某条线
LineDataSet lineDataSet = new LineDataSet(pointValues, "");
//设置该线的颜色
lineDataSet.setColor(Color.parseColor("#5dbcfe"));
//设置该线的宽度
lineDataSet.setLineWidth(1f);
//设置每个坐标点的圆大小
lineDataSet.setCircleRadius(4f);
//设置不能选中 flase
lineDataSet.setHighlightEnabled(true);
//设置是否画圆
lineDataSet.setDrawCircles(true);
//高亮颜色
lineDataSet.setHighLightColor(Color.parseColor("#005dbcfe"));
//中心圆半径
lineDataSet.setCircleHoleRadius(2);
//中心圆颜色
lineDataSet.setCircleColorHole(ContextCompat.getColor(activity, R.color.appbgcolor));
//圆圈颜色
lineDataSet.setCircleColor(Color.parseColor("#5bbcff"));
// 设置平滑曲线模式
// lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
//设置线一面部分是否填充颜色
lineDataSet.setDrawFilled(true);
if (Build.VERSION.SDK_INT >= 18) {
lineDataSet.setFillDrawable(ContextCompat.getDrawable(activity, R.drawable.shape_mianchart_filldrawable));
} else {
//设置填充的颜色
lineDataSet.setFillColor(Color.parseColor("#445dbcfe"));
}
//设置是否显示点的坐标值
lineDataSet.setDrawValues(false);
lineDataSet.setValueTextColor(Color.parseColor("#5abdfe"));
//线的集合(可单条或多条线)
List<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(lineDataSet);
//把要画的所有线(线的集合)添加到LineData里
LineData lineData = new LineData(dataSets);
//把最终的数据setData
chart.setData(lineData);
}
2.barchart使用:
设置:
animateY(1000);
animateX(1000);
setDescription(null);//去除Description
setDragEnabled(true);//设置可以拖动
setDragDecelerationEnabled(true);//拖动减速
setDoubleTapToZoomEnabled(false);//取消双击缩放
setBackgroundColor(ContextCompat.getColor(getContext(), R.color.appbgcolor));//背景颜色
setScaleYEnabled(false);//1取消y轴缩放
setDragDecelerationFrictionCoef(0.9f);//拖动降速速率
getAxisRight().setEnabled(false);//取消右边y轴
getAxisLeft().setTextSize(10);//y轴字体大小
getAxisLeft().setMinWidth(0f);//左边y轴最小值
getAxisLeft().setAxisLineColor(Color.parseColor("#00ffffff"));//y轴线颜色
getAxisLeft().setGridColor(Color.parseColor("#0b3652"));//网格颜色
getAxisLeft().setTextColor(Color.parseColor("#65859a"));//y轴字体颜色
getAxisLeft().setDrawLimitLinesBehindData(false);//设置限制线
getXAxis().setTextColor(Color.parseColor("#65859a"));//x轴字体颜色
getXAxis().setAxisLineWidth(0);//x轴线宽度
getXAxis().setDrawGridLines(false);//取消x轴网格
getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴在底部显示
getXAxis().setTextSize(10);//x轴字体大小
getXAxis().setAxisLineColor(Color.parseColor("#00ffffff"));//x轴线颜色
// getXAxis().setYOffset(0);//x轴偏移量
getXAxis().setGranularity(1f);//显示一个值
// getXAxis().setAxisMinimum(0);//x轴最小值为0,如果设置为0,就会出现第一条柱形图显示不全
getXAxis().setAxisMaximum(31);x轴最大值为31
getXAxis().setCenterAxisLabels(true);//选中标志居中显示
getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
getXAxis().setCenterAxisLabels(false);//标签文字显示在直方图中间,会导致文字看起来不居中
// getXAxis().setXOffset(0); //设置偏移量
getXAxis().setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
return (int) v + "";
}
});
// getXAxis().setSpaceMin(100);
//setBorderWidth(100);
getLegend().setEnabled(false);//不显示legend
添加数据:
List<BarEntry> pointValues = new ArrayList<>();
final ArrayList<String> xVals = new ArrayList<>();//X轴数据
for (int i = 0; i < 30; i++) {
xVals.add(i+1+"");
int y = (int) (Math.random() * 30);
pointValues.add(new BarEntry(i,y));
}
chart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(xVals));//x轴显示
//点构成的某条线
BarDataSet barDataSet = new BarDataSet(pointValues, "");
barDataSet.setAxisDependency(YAxis.AxisDependency.RIGHT);
//允许选中
barDataSet.setHighlightEnabled(true);
//选中颜色
barDataSet.setHighLightColor(Color.parseColor("#00fffe"));
//背景颜色
barDataSet.setBarBorderColor(ContextCompat.getColor(activity, R.color.appbgcolor));
//设置不显示值
barDataSet.setDrawValues(false);
//设置bar颜色
barDataSet.setColor(Color.parseColor("#00fffe"));
//线的集合(可单条或多条线)
List<IBarDataSet> dataSets = new ArrayList<>();
dataSets.add(barDataSet);
//把要画的所有线(线的集合)添加到LineData里
BarData barData = new BarData(dataSets);
//直方图占空比 0~1
barData.setBarWidth(0.2f);
//把最终的数据setData
chart.setData(barData);
3.一些坑
1.添加均线:
//设置可用课时
LimitLine ll1 = new LimitLine(16, "可用");
ll1.setTextColor(Color.YELLOW);
ll1.setLabel("可用");
ll1.setLineWidth(1f);
ll1.setEnabled(true);
ll1.setLineColor(Color.YELLOW);
ll1.enableDashedLine(5f, 10f, 0f);//三个参数,第一个线宽长度,第二个线段之间宽度,第三个一般为0,是个补偿
ll1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);//标签位置
ll1.setTextSize(10f);
chart.getAxisLeft().addLimitLine(ll1);
//设置均值
LimitLine ll2 = new LimitLine(7, "均值");
ll2.setLabel("均值");
ll2.setTextColor(Color.parseColor("#5dbcfe"));
ll2.setLineWidth(1f);
ll2.setEnabled(true);
ll2.setLineColor(Color.parseColor("#5dbcfe"));
ll2.enableDashedLine(5f, 10f, 0f);//三个参数,第一个线宽长度,第二个线段之间宽度,第三个一般为0,是个补偿
ll2.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);//标签位置
ll2.setTextSize(10f);
chart.getAxisLeft().addLimitLine(ll2);
2.添加点击显示的标签markview
chart.setMarker(new DeviceDataChartMarkView(getContext()));//自定义markview
public class DeviceDataChartMarkView extends MarkerView{
private TextView tvContent;
public DeviceDataChartMarkView(Context context) {
super(context, R.layout.view_devicedata_markview);
tvContent = (TextView) findViewById(R.id.devicedata_markview_text);
}
@Override
public void refreshContent(Entry e, Highlight highlight) {
tvContent.setText(""+ FormatUtil.getInt(e.getY()));
super.refreshContent(e, highlight);
}
@Override
public MPPointF getOffset() {
return new MPPointF(-(getWidth() / 2), -getHeight());
}
}
3.添加点击自动居中
setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry entry, Highlight highlight) {
centerViewToAnimated(entry.getX(), entry.getY(), YAxis.AxisDependency.RIGHT, 500);//自动居中
}
@Override
public void onNothingSelected() {
}
});
4.默认放大指定倍数:
Matrix m = new Matrix();//放大x轴
m.postScale(30f / 7f, 1f);//两个参数分别是x,y轴的缩放比例。例如:将x轴的数据放大为之前的1.5倍
getViewPortHandler().refresh(m, this, false);//将图表动画显示之前进行缩放
5.barchart第一条柱形图显示不全
getXAxis().setAxisMinimum(0);//x轴最小值为0,如果设置为0,就会从0开始,出现第一条柱形图显示不全
6.与viewpager结合使用滑动图表手势冲突
自定义图表重写onTouchEvent捕捉手势
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(false);//这里我们是让getParent()去请求
startX = (int) event.getX();
startY = (int) event.getY();
int per = getWidth()/4;
if(startX<per||startX>(getWidth()-per)){//两边范围内运行切换上下页
getParent().requestDisallowInterceptTouchEvent(false);
}else{
getParent().requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.onTouchEvent(event);
}
7.x轴每条数据区会显示多个数值
getXAxis().setGranularityEnabled(false);
getXAxis().setGranularity(1f);//显示一个值
8.x轴文字偏移底部距离:
setExtraBottomOffset(10);//底部偏移量
9.x轴文字不居中,会有偏移
getXAxis().setCenterAxisLabels(false);//如果设置了true,会居中在直方图中间,看起来文字是不居中的
10.代码选中高亮
mBardChart.highlightValue(position,0);//选中高亮,position:x的下标位置
11.设置轴上显示文字
chart.getAxisLeft().setValueFormatter(new IAxisValueFormatter() {//设置y轴显示文字
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
return null;
}
});
chart.getXAxis().setValueFormatter(new IAxisValueFormatter() {//设置x轴显示文字
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
return null;
}
});
12.添加图表内容区域与四周边界偏移量
chart.setExtraRightOffset(20);//添加右边偏移量,不然会看不见今天两个字
13.个数少,显示间隔太大
通过添加最大值限制
chart.getXAxis().setAxisMaximum(7);
14.x轴最右边数值或者文字被遮挡或者不现实
设置最大值为显示个数小一点,比如小0.2:
chart.getXAxis().setAxisMaximum(count-0.2f);
chart.getAxisLeft().setAxisMinimum(0f);