android AChartEnginee讲解之源码框架解读
从上周把android ACHartEnginee的源码check out出来后就一直在看这个东西是如何使用的,以及底层是如何实现的,把最近一周对这个东西的了解先发上来,即是给自己做一个总结,也希望能帮到想学习这个开源工程的童鞋们。那下面我们就切入正题。
android AChartEnginee是个什么东西呢,它是Apache的一个开源图表工程,就是为了方便android应用程序去绘制那此高难度的图表,比如:饼图,曲线图,柱状图等,与web端的high chart类似,掌握了这个工程以后,只要我们将我们的数据组装成achartenginee要求的格式,再调用对应的API设置好相应的参数,即可将你想绘制的图表绘制出来,十分的强大。今天我们先把这个工程的整体架构就我了解的讲解一下。
先看一下源工程的代码结构,如图:
这就是整个工程的结构,image包中只放了三张程序中用到的图片(跳过),util包中主要放了一些算法相关的工具类,看也看不太懂,tools中主要放了用来控制整个图表放大缩小的工具类,也不进行讲解了,主要分析一下chart, renderer,model这个包和ChartFactory,GraphicalView这两个类。
一. 先分析一下renderer这个包的作用,首先这个单词的意思是渲染的意思,从字面意思就大概可以知道,这个包下的类主要是用来对图表的样式进行渲染的,也就是说,主要是用来控制图表的外观。下面看一下renderer这个包中的类有那些:
从图中可以看到,主要有几个XXXRenderer类,看了源码可以知道,DefaultRenderer是DialRenderer,XYMultipleSeriesRenderer的父类,SimpleSeriesRenderer是XYSeriesRenderer的父类,所以我们分两组来讲解。
1)DeaultRenderer及其子类Renderer是针对整个图表进行的渲染的,也就是说:他们是用来设置整个图表的样式的,DefaultRenderer定义了所有图表都有的一些共通的属性,例如:mChartTitle,mBackground等,具体详细的属性可以看源码;DialRenderer是继承于DefaultRenderer类的,除了有父类的那些共同的属性外,他还有一些自己独特的属性,DialRenderer主要是用来渲染饼图的渲染器,例如:不同类型的饼图,柱柱图等可以用这个Renderer去做渲染;XYMultipleSeriesRenderer也拥有父类的那些属性,他自己也有许多独特的属性去设置,XYMultipleSeriesRenderer则主要用来对XY坐标轴图表进行渲染。由此可见,我们再进行不同类型图表的绘制时要使用对应的渲染器去进行渲染,以达到最好的效果。
2)SimpleSeriesRenderer是XYSeriesRenderer的父类,就我的理解,这两个渲染器则是对具体的每个点去渲染不同的效果,SimpleSeriesRenderer主要是用来对饼图一类的图表中的点进行渲染,而 XYSeriesRenderer则主要是对坐标轴点进行渲染。
二.再分析一下model包的作用,model包中的类如图所示:
这个包中,主要包含了一些图表点的集合,不同类型的图表,我们要使用对应的对象去装载对不同类型的点集。其中: CategorySeries是用来装载饼图的点集,MultipleCategorySeries是用来装载面包圈图的点集,RangeCategorySeries是用来装载柱状图的点集,TimeSeries,XYSeries,XYValueSeries主要是用来装载坐标轴点集,XYMultipleSeriesDataset则是对以上三个点集的一个集合(因为我们的坐标轴中,可能有多个图像)。
三.再分析一下chart包的作用,chart包中的类如图所示:
这个包的中的所有类就是负责具体绘制图表的类,他们中都对不同的图表提供了不同的绘制方法,根据类的名字就可以知道他们分别是用来绘制那些图表的。具体是如何绘制的,我也看不懂。
最后要说的就是ChartFactory这个工厂类了,这个工厂类的作用就是根据我们调用的不同的工厂方法,并传入对应的dataset和renderer,调用GraphicalView为我们生成一个具体的图表View,来让我们去做显示。
以上就是我对这个开源工程宏观上的一些理解,具体的实现步骤也不想深入的去看了,实在是挺难懂的,只要我们从整体上了解了这个工程不同的类的作用,能够熟练的应用,就可以了。
总结:整个工程的结构十分的清晰,负责渲染的类,负责组装数据的类,和真正负责利用渲染类中的设置和数据类中的数据去绘制的类。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。