0.MPAndroidChart简介(MPAndroidChart源码解析)

2,593 阅读2分钟

这系列文章是在2018年就在简书上写过的,后来感觉空闲的时候还是应该多写写博客提高一下自己,但是一看简书已经不是以前的简书了(广告和推荐太多),所以选择在更专注于技术分享的掘金上继续写博客。

背景

MPAndroidChart 是android上非常流行的一个图表类开源库。

最近公司要做BI相关的功能,调研了很多图标库,最终选中了这个开源库,由于产品的设计不同需要修改其中的源码,为了更好的修改源码,决定对其源码做一个详细的分析。 私以为分析源码的最好的方式就是大体看一遍源码后,仿照源码简单的实现一遍这个库,这里就是将柱状图进行了简单的实现,所以就写了一个精简版的 LineChart,后来产品又要类似 Excel 的表格,功能还比较复杂,所以根据 Chart 库的原理又写了个 TableChart,效果还不错,就是工期太紧代码不太工整。

系列文章

除了这一篇简介,还写了一系列的文章:

1.Matrix基础简介

2.工具类解析-ViewPortHandler

3.工具类解析-Transformer

4.坐标轴的绘制

5.手势实现解析

6.柱状图数据的绘制

下面我们简单的介绍一下这个库的结构

数据结构:

数据关系图.png
以BarChart为例,每一个BarChart含有一个BarData,BarData中包含了多个BarDataSet,每个BarDataSet包含一组BarEntry,BarEntry中持有每一个数据的xValue和yValue。

绘制类

绘制类就是多个Renderer类,比如BarRenderer类等,后面会详细介绍

工具类

工具类主要包含ViewPortHandler和Transformer这两个类,它们俩是作为中间人的角色,连接着Renderer,ChartView,TouchListener等。

简易的绘制流程图

绘制流程.png

需要注意的一点是,若是在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);