从上周把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的结构十分的清晰,负责渲染的类。负责组装数据的类。和真正负责利用渲染类中的设置和数据类中的数据去绘制的类。

android AChartEnginee解说之源代码框架解读的更多相关文章

  1. 六款值得推荐的android(安卓)开源框架简介

    1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduli ...

  2. 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发

    掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime ...

  3. Android开发中用到的框架、库介绍

    Android开发中用到的框架介绍,主要记录一些比较生僻的不常用的框架,不断更新中...... 网路资源:http://www.kuqin.com/shuoit/20140907/341967.htm ...

  4. Android音频系统之音频框架

    1.1 音频框架 转载请注明,From LXS, http://blog.csdn.net/uiop78uiop78/article/details/8796492 Android的音频系统在很长一段 ...

  5. Android插件化(使用Small框架)

    github: https://github.com/cayden/MySmall Android插件化(使用Small框架) 框架源代码 1. Create Project File->New ...

  6. 200多种Android动画效果的强悍框架

    admin 发布于2015-10-23 14:33 363/68015 [精品推荐]200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^ 功能模块和技术方案 只 ...

  7. Android Kotlin Jetpack Compose UI框架 完全解析

    前言 Q1的时候公司列了个培训计划,部分人作为讲师要上报培训课题.那时候刚从好几个Android项目里抽离出来,正好看到Jetpack发布了新玩意儿--Compose,我被它的快速实时打包给吸引住了, ...

  8. 2015最流行的Android组件、工具、框架大全

    Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件. 本文试图将目前流行的组件收集起来以 ...

  9. android平台手电筒开发源代码

    android平台手电筒开发源代码,AndroidManifest.xml文件的入口是startapp,这个文件没上传上来,大家可以自己写. 1. [代码]android 1 2 3 4 5 6 7 ...

随机推荐

  1. redis实现计数--------Redis increment

    经理提出新的需求,需要知道每天微信推送了多少条模板消息,成功多少条,失败多少条,想到用Redis缓存,网上查了一些资料,Redis中有方法increment,测试代码如下 Controller imp ...

  2. Ubuntu下安装sublime text3并汉化

    转载请注明出处:果冻栋吖 通过ppa安装,打开终端,输入以下命令: sudo add-apt-repository ppa:webupd8team/sublime-text- sudo apt-get ...

  3. selenium对浏览器属性操作的方法

    最大化 方法一 //指明ChromeDriver路径 System.setProperty(Src_url_string.Chrome_Driver, Src_url_string.Driver_ad ...

  4. Android网络编程随想录(2)

    上篇文章介绍了传输层TCP协议的理论知识,本文主要介绍了TCP协议基础之上HTTP协议和HTTPS协议的理论知识. HTTP协议基于TCP协议定义了客户端向服务器请求数据的方式,它是面向事务的应用层协 ...

  5. 洛谷P2607 [ZJOI2008]骑士(树形dp)

    题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里, ...

  6. 学习js与css 写个2048

    学习阶段,还是写点小东西练练手学的有意思一点,今天用栅格布局做了一个2048,但是移动动画和合并特效没有做,只简单的实现了一下功能. 记录一下学习的过程. 1.入口函数,初始化界面,我这里是直接是一个 ...

  7. 在webstrorm中配置好es6 babel【更新:在webstorm中配置.vue和.vue文件中支持es6】

    第一步:全局安装babel-cli npm install -g babel-cli 第二步,新建一个空项目,在 WebStorm 中的当前项目中打开 Terminal,进入项目的根目录下, 安装 E ...

  8. class A<T> where T:new()相关知识点

    来源:http://www.cnblogs.com/FredWang/p/4284251.html class A<T> where T:new()  ===>>>   ...

  9. 如何在Word的方框中打对号

    在word中,选择“插入”-“符号”,选择字体为“wingdings”,在倒数第二个特殊字符既是方框中有对号的特殊字符. 1. 2. 3.

  10. mysqldump+mydumper+xtrabackup备份原理流程

    mysqldump备份原理 备份的基本流程如下: 1.调用FTWRL(flush tables with read lock),全局禁止读写 2.开启快照读,获取此时的快照(仅对innodb表起作用) ...