最新项目当中使用到了MPAndroidChart这个三方库用来绘制相关的图标.该库能力确实十分强大,但是使用过程中缺遇到了很多坑,该库在3.0版本进行了一次较大的改动,相对于2.x的版本很多用法都发生了变化.本人使用的是3.03版本,所以内容以3.03版本的API为准.项目当中主要使用到了折线图,蜡烛图,饼状图以及组合图,会针对这几个图表进行一些整理.
首先po一下MPAndroidChart的Git地址 : MPAndroidChart,以及对用的JavaDocs文档 : MPAndroidChartJavaDocs
通过JavaDocs可以大致看出来该库主要分为几大类:
1,Chart:图表的基类,其子类则是我们在xml当中需要用到的各种线段图控件.例如LineChart(折线图),BarChart(柱状图),CandleChart(蜡烛图),CombinedChart(组合图)....
2,ChartData:图表数据的基类,其子类与Chart类的子类一一对应,为图表提供数据.例如LineData与LineChart对应,BarData与BarChart对应,CandleChart与CandleData对应.用来添加DataSet.
3,BaseDataSet:图表数据设置的基类.其子类与上述的规则雷同,例如LineDataSet.用来添加Entry,并且可以对该图表中的数据进行一系列的设置.
4,BaseEntry:其子类是真正用来添加数据的类.规则也与之前的类似.唯一不同的是折线图的Entry直接使用Entry.不同的图标Entry需要添加的参数不同
通过这4个类,我们得出一个最基本的信息,不考虑其他效果,交互,仅仅使用最基本的展示图表的时候,其用法如下(伪代码):
折线图为例:
ArrayList<Entry> lineEntries = new ArrayList<>();
//这里需要特殊说明,3.0版本的用法与2.x版本较大的不同在这里,2.x版本需要单独定义一个存放x坐标的集合,而3.0版本只要直接传入即可
lineEntries.add(new Entry(x坐标点,实际的数据));
LineDataSet lineDataSet = new LineDataSet(lineEntries,"line") //第二个参数相当于该Set的标记,自定义
LineData lineData = new LineData(lineDataSet);
LineChart.setData(lineData);
当然,很多时候我们的需求不仅仅是单纯的展示,还需要有一些列的设置,那么我们还可以从JavaDocs中找到很多的设置
1,Chart类的一些设置: 每个图表都可以通过相对应的设置开启或关闭一些交互以及显示,列举一些常用的
//是否可以缩放
setScaleEnabled(true);
//是否绘制边框
setDrawBorders(true);
//边框的宽度
setBorderWith(1);
//边框的颜色
setBorderColor(#000000);
//是否可以拖动
setDragEnabled(true);
//Y轴是否可以缩放
setScaleYEnabled(false);
//是否启用Y轴自动缩放
setAutoScaleMinMaxEnabled(true);
//是否持续滚动
setDragDecelerationEnabled(false);
//是否双击缩放
setDoubleTapToZoomEnabled(false)
//没有加载到数据时文字显示
setNoDataText(" ")
//没有加载到数据时文字颜色
setNoDataTextColor(#000000)
还可以通过getDescription()和getLegend()得到描述对象和图例对象的实例.并且通过Description和Legend自身的API设置图表的描述信息和图例.这个不再图表类的API当中,之后拿出来单独说
2.DateSet类的一些设置: 每一种图表的DateSet都有对于该图表设置的特殊API,以下已LineDataSet,CandleDataSet,BarDataSet为例.
通用:
//是否显示数据集的数值
setDrawValues(false);
//设置高亮线的颜色,就是点击或者长按出现的线
setHighLightColor(#FFFFFF);
//是否允许高亮线显示
setHighlightEnabled(false);
LIneDataSet :
//设置折线图折线的宽度
setLineWidth();
//设置折线的样式 CUBIC_BEZIER:圆滑的直线,LINEAR:直线,HORIZONTAL_BEZIER:不是特别圆滑的直线,STEPPED:类似于柱状图的感觉
setMode(LineDAtaSet.Mode.CUBIC_BEZIER);
//是否绘制两个点之间的圆点
setDrawCircles(false);
//线的颜色
setColor(#FFFFFF);
//是否填充数据集
setDrawFilled(true);
//设置填充的样式,可以自己通过shape去画一个
setFillDrawable(drawable);
CandleDataSet:
//设置open < close 的颜色. 也就是跌的颜色
setDecreasingColor(#FFFFFF);
//设置open > close的颜色, 也就是涨的颜色
setIncreasingColor(#FFFFFF);
//设置open == close的颜色. 这个有个坑,如果不设置该蜡烛图的位置是一片空白的
setNeutralColor(#FFFFFF);
//设置是否蜡烛图上下的线于该蜡烛图涨跌颜色相同
setShadowColorSameAsCandle(true);
//设置蜡烛图上下线的宽度
setShadowWidth();
//设置涨幅蜡烛图的样式(空心,实心)
setDecreasingPaintStyle(Paint.Style.FILL);
//设置跌幅蜡烛图的样式(空心,实心)
setIncreasingPaintStyle(Paint.Style.FILL);
//设置数据集绘制对
setAxisDependency(YAxis.AxisDependency.LEFT)
BarDataSet:
//设置柱状图数据集的颜色
setColors(ArrayList);
3.x轴和y轴的一些设置.CharData类是对整个图表外部以及操作进行一些设置,DataSet类是对图表内容进行一些设置.那么自然也会有x轴y轴的设置.
x轴: x轴设置是通过Chart.getXAxis() 获得一个XAxis的实例,调用XAxis的实例进行一些对于x轴的设置
//是否允许x轴绘制
setDrawLabels(true); 如果设置为false,则所有的x轴设置都不起作用
//是否绘制x轴的轴线
setDrawAxisLine(false);
//是否绘制x轴边线
setDrawGridLines(false);
//设置x轴的最小偏移
setAxisMinimum(0.5f);
//设置x轴字体颜色
setTextColor();
//设置x轴字体大小
setTextSize()
//设置x轴的位置
setPosition(XAxis.XAxisPosition.BOTTOM);
//设置x轴标签数量
setLabelCount(5,true); 如果不传第二个参数或者false则位置不会固定,传入true则位置固定
y轴: y轴分为左边和右边两个轴,通过getAxisLeft()和getAxisRight()获得对应的实例.基本设置的api与x轴雷同,举例几个能用上但是与x轴不太一样的
//这是y轴标签
setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART); 可以传入两种参数,INSIDE在图表内部,OUTSIDE在外部
//是否允许最上边的标签绘制
setDrawTopYLabelEntry();
//自定义y轴标签数值
setValueFormatter(); 内部实现一个IAxisValueFormatter接口,可以通过里面对应的value修改标签数值.比如数值太小转成科学计数法或者截取到几位等等
一些基本设置就暂时写到这里,后续会记录一下个人遇到的一些难点