从上周把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. 深入解析Dropout——基本思想:以概率P舍弃部分神经元,其它神经元以概率q=1-p被保留,舍去的神经元的输出都被设置为零

    深度学习网络大杀器之Dropout——深入解析Dropout  转自:https://yq.aliyun.com/articles/68901 摘要: 本文详细介绍了深度学习中dropout技巧的思想 ...

  2. jquery选择器(可见对象,不可见对象) +判断,对象(逆序)

    //可见对象: $("li:visible ") //可见对象下的 隐藏对象 $("li:visible [type='hidden']") //获得 可见 的 ...

  3. 11.javaweb国际化标签库

    一.国际化标签库 1,格式化标签库提供的标签 2,标签详解 2.1<fmt:setLocale>标签 下面设置不同的区域,并在设置的区域下显示日期 2.2<fmt:requestEn ...

  4. JavaScript是按引用传递or值传递?

    今遇js基础类型等问题,已经有点模糊,遂作总结. 前言: JavaScript原始类型:Undefined.Null.Boolean.Number.String.Symbol JavaScript引用 ...

  5. vc++如何创建程序--利用快捷键进行多行注释

    Eclipse同时注释多行①:ctrl+/或 ②:ctrl+shift+/ : Visual studio先按ctrl+k 再按 ctrl+c 2.在VC++6.0中需要自己设置快捷键,设置方法链接如 ...

  6. JA document的练习

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. JS 九九运算表

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. JSCH实现文件上传下载至sftp服务器

    文件服务器采用FreeSSHd,文件服务器配置就不细说了. 直接上代码,该代码可以直接使用. import com.jcraft.jsch.*; import java.io.InputStream; ...

  9. PySimpleGUI 的第一个桌面软件

    最近学习了python风格的GUI模块,寻思着既然学了,就要学以致用,花了点时间,写了下面这个 简历软件.后面,可以通过接口 获取提交的数据,传到数据库里与网页交互.此软件我已经打包成 exe软件,直 ...

  10. Linux下mysql 忘记密码的解决办法

    >mysql -u root -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \ ...