从上周把android ACHartEnginee的源代码check out出来后就一直在看这个东西是怎样使用的,以及底层是怎样实现的,把近期一周对这个东西的了解先发上来,即是给自己做一个总结,也希望能帮到想学习这个开源project的童鞋们。那以下我们就切入正题。

android AChartEnginee是个什么东西呢,它是Apache的一个开源图表project,就是为了方便android应用程序去绘制那此高难度的图表,比方:饼图,曲线图,柱状图等,与web端的high chart类似,掌握了这个project以后,仅仅要我们将我们的数据组装成achartenginee要求的格式,再调用相应的API设置好相应的參数,就可以将你想绘制的图表绘制出来,十分的强大。今天我们先把这个project的总体架构就我了解的解说一下。

先看一下源project的代码结构,如图:

这就是整个project的结构。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,来让我们去做显示。

以上就是我对这个开源project宏观上的一些理解。详细的实现步骤也不想深入的去看了,实在是挺难懂的。仅仅要我们从总体上了解了这个project不同的类的作用,可以熟练的应用,就行了。

总结:整个project的结构十分的清晰,负责渲染的类。负责组装数据的类。和真正负责利用渲染类中的设置和数据类中的数据去绘制的类。

最新文章

  1. 【CentOS】Linux日常管理
  2. 如何获取配置文件Web.config的AppSetting节点数据
  3. VIM for Python and Django Development
  4. Ubuntu中如何打开终端terminal
  5. MyEclipse项目中的包按层次显示
  6. vbox导入虚拟电脑网卡MAC问题
  7. 第4章 yum在线安装
  8. linux eclipse
  9. Firefly distributed模块的原理与twisted中PB远程调用协议
  10. 可用于Windows Server 2008 R2的Xbox One手柄、接收器驱动
  11. LFYZ-OJ ID: 1015 统计数字(NOIP2007)
  12. python基础(17)继承类和面向对象初识
  13. 请根据英文单词的第一个字母判断星期几,如果第一个字母是一样的,则继续判断第二个字母。例如如果第一个字母是S,则继续判断第二个字母,如果第二个字母是a,则输出“星期六”
  14. MySQL 误操作后如何快速恢复数据~!~!~
  15. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)
  16. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'即UTC时间,与String日期转换
  17. git 对比两个分支差异
  18. Jasperreport5.6.9-----2
  19. thrift学习总结
  20. 第7章 Ajax数据爬取

热门文章

  1. 【NOIP 2011】 Mayan游戏
  2. Nginx调优实战
  3. ELK+kafka日志收集
  4. Mysql数据类型(一)
  5. jsp指令介绍
  6. css3伸缩布局中justify-content详解
  7. arttemplate.js原生写法案例
  8. SqlServer与MySql 系统表查询自建表数据
  9. 给 iOS 开发者的 RxSwift(一)
  10. MVC ViewData和ViewBag 参数名一样表示同一个值