这系列文章是在2018年就在简书上写过的,后来感觉空闲的时候还是应该多写写博客提高一下自己,但是一看简书已经不是以前的简书了(广告和推荐太多),所以选择在更专注于技术分享的掘金上继续写博客。
背景
MPAndroidChart 是android上非常流行的一个图表类开源库。
最近公司要做BI相关的功能,调研了很多图标库,最终选中了这个开源库,由于产品的设计不同需要修改其中的源码,为了更好的修改源码,决定对其源码做一个详细的分析。 私以为分析源码的最好的方式就是大体看一遍源码后,仿照源码简单的实现一遍这个库,这里就是将柱状图进行了简单的实现,所以就写了一个精简版的 LineChart,后来产品又要类似 Excel 的表格,功能还比较复杂,所以根据 Chart 库的原理又写了个 TableChart,效果还不错,就是工期太紧代码不太工整。
系列文章
除了这一篇简介,还写了一系列的文章:
4.坐标轴的绘制
5.手势实现解析
6.柱状图数据的绘制
下面我们简单的介绍一下这个库的结构
数据结构:
以BarChart为例,每一个BarChart含有一个BarData,BarData中包含了多个BarDataSet,每个BarDataSet包含一组BarEntry,BarEntry中持有每一个数据的xValue和yValue。绘制类
绘制类就是多个Renderer类,比如BarRenderer类等,后面会详细介绍
工具类
工具类主要包含ViewPortHandler和Transformer这两个类,它们俩是作为中间人的角色,连接着Renderer,ChartView,TouchListener等。
简易的绘制流程图
需要注意的一点是,若是在Chart的onSizeChange执行完之后才设置了数据,需要调用invalidate,比如我们在延时之后再设置data:
new Timer().schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
barChart.setData(data);
barChart.invalidate();
}
});
}
},1000);