比achartengine更加强大的图表控件。
核心功能:
-
支持x,y轴缩放
-
支持拖拽
-
支持手指滑动
-
支持高亮显示
-
支持保存图表到文件中
-
支持从文件(txt)中读取数据
-
预先定义颜色模板
-
自动生成标注
-
支持自定义x,y轴的显示标签
-
支持x,y轴动画
-
支持x,y轴设置最大值和附加信息
-
支持自定义字体,颜色,背景,手势,虚线等
项目地址:https://github.com/PhilJay/MPAndroidChart
也可以直接下载jar包:https://github.com/PhilJay/MPAndroidChart/releases
另外,需要NineOldAndroids支持:https://github.com/JakeWharton/NineOldAndroids
可直接下载jar包:
nineoldandroids-2.4.0.jar
效果图:
支持的图标类型:
-
LineChart (线性图)
-
-
LineChart (线性图)
-
-
-
PieChart (饼图)
-
ScatterChart (散列图)
-
CandleStickChart (K线图、蜡烛图)
-
BubbleChart (气泡图)
-
RadarChart (网图)
如何使用
以曲线图(LineChart)为例
1, 创建图表实例
1.
<com.github.mikephil.charting.charts.LineChart
2.
android:id=
"@+id/lineChart"
3.
android:layout_width=
"match_parent"
4.
android:layout_height=
"300dp"
/>
或者:
1.
LineChart chart =
new
LineChart(Context);
2. 设置参数
1.
lineChart = (LineChart)
this
.findViewById(R.id.lineChart);
2.
//lineChart.setBackgroundColor(0xFF6BF3AD);//设置图表背景
3.
lineChart.setDrawGridBackground(
false
);
//取消网格背景色
4.
...
整个LineChart控件分为图表背景色、网格背景色,二者可单独设置。
3. 设置数据Data
1.
setData(
12
,
100
);
01.
/**
02.
* 生成数据
03.
* @param count
04.
* @param range
05.
* @return
06.
*/
07.
private
void
setData(
int
count,
float
range) {
08.
09.
ArrayList<String> xVals =
new
ArrayList<String>();
10.
for
(
int
i =
0
; i < count; i++) {
11.
xVals.add((i+
1
) +
"月"
);
12.
}
13.
14.
ArrayList<LineDataSet> dataSets =
new
ArrayList<LineDataSet>();
15.
dataSets.add(createLineDataSet(count, range,
"小米"
,
0xFFFFF78E
));
16.
dataSets.add(createLineDataSet(count, range,
"华为"
,
0xFFC1FF8D
));
17.
LineData data =
new
LineData(xVals, dataSets);
18.
19.
// set data
20.
lineChart.setData(data);
21.
}
22.
/**
23.
* 生成曲线数据
24.
*/
25.
private
LineDataSet createLineDataSet(
int
count,
float
range, String label,
int
color){
26.
ArrayList<Entry> yVals =
new
ArrayList<Entry>();
27.
for
(
int
i =
0
; i < count; i++) {
28.
float
mult = (range +
1
);
29.
float
val = (
float
) (Math.random() * mult) +
3
;
30.
yVals.add(
new
Entry(val, i));
31.
}
32.
LineDataSet lineDataSet =
new
LineDataSet(yVals, label);
33.
lineDataSet.setColor(color);
34.
return
lineDataSet;
35.
}
对于曲线来说,在一张图表上可以显示多条曲线,每条曲线都是一个LineDataSet实例,并且可单独设置样式。
ArrayList<LineDataSet> dataSets : 创建曲线集合。
将所有曲线数据封装成LineData, 如 LineData data = new LineData(xVals, dataSets);
最终lineChart.setData(data);
主要的Api方法:
-
setDescription(String desc)
: 设置表格的描述 -
setDescriptionTypeface(Typeface t)
:自定义表格中显示的字体 -
setDrawYValues(boolean enabled)
: 设置是否显示y轴的值的数据 -
setValuePaintColor(int color)
:设置表格中y轴的值的颜色,但是必须设置setDrawYValues(true) -
setValueTypeface(Typeface t):设置字体
-
setValueFormatter(DecimalFormat format)
: 设置显示的格式 -
setPaint(Paint p, int which)
: 自定义笔刷 -
public ChartData getDataCurrent()
:返回ChartData对象当前显示的图表。它包含了所有信息的显示值最小和最大值等 -
public float getYChartMin()
: 返回当前最小值 -
public float getYChartMax()
: 返回当前最大值 -
public float getAverage()
: 返回所有值的平均值。 -
public float getAverage(int type)
: 返回平均值 -
public PointF getCenter()
: 返回中间点 -
public Paint getPaint(int which)
: 得到笔刷 -
setTouchEnabled(boolean enabled)
: 设置是否可以触摸,如为false,则不能拖动,缩放等 -
setDragScaleEnabled(boolean enabled)
: 设置是否可以拖拽,缩放 -
setOnChartValueSelectedListener(OnChartValueSelectedListener l)
: 设置表格上的点,被点击的时候,的回调函数 -
setHighlightEnabled(boolean enabled)
: 设置点击value的时候,是否高亮显示 -
public void highlightValues(Highlight[] highs)
: 设置高亮显示 -
saveToGallery(String title)
: 保存图表到图库中 -
saveToPath(String title, String pathOnSD)
: 保存. -
setScaleMinima(float x, float y)
: 设置最小的缩放 -
centerViewPort(int xIndex, float val)
: 设置视口 -
fitScreen()
: 适应屏幕
动画:
所有的图表类型都支持下面三种动画,分别是x方向,y方向,xy方向。
-
animateX(int durationMillis)
: x轴方向 -
animateY(int durationMillis)
: y轴方向 -
animateXY(int xDuration, int yDuration)
: xy轴方向
注意:如果调用动画方法后,就没有必要调用invalidate()方法,来刷新界面了。