从上周把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. poj--2553--The Bottom of a Graph (scc+缩点)

    The Bottom of a Graph Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Oth ...

  2. 【转】win7下安装搭建tomcat服务器

    原文网址:http://www.voidcn.com/blog/tianxiawuzhei/article/p-3450678.html 1.安装jdk,因为tomcat就是一个java程序,所以需要 ...

  3. 利用@factory和@dataProvider实现参数化

    利用构造函数将要用的的参数初始化,非常有利于简化脚本.它将外部的数据赋给本地的变量,可以使得初始化后的参数被其他方法使用.直接上代码: private String url;    private S ...

  4. testNG中方法的调用顺序

    今天在执行selnium的test case时,总是遇到空指针错误.但是以前也有run成功过,然后换了各种方法定位元素,都失败了,所以怀疑应该不是元素定位不到的问题,所以可能是method之间有依赖, ...

  5. [Codeforces]Educational Codeforces Round 37 (Rated for Div. 2)

    Water The Garden #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h ...

  6. layui新手使用

    1,首先最重要的是引入官方的layui.js  layui.css文件 2,在自己的项目中新建一个目录 再在该目录下建一个js文件,js中写入 layui.define(['layer', 'form ...

  7. javascript中经典继承的兼容写法

    function create(obj) { // 2.1 判断浏览器支持不支持 Object.create // 如果支持,直接使用 Object.create // 如果不支持,自己实现 if(O ...

  8. 23个Python爬虫开源项目代码:爬取微信、淘宝、豆瓣、知乎、微博等

    来源:全球人工智能 作者:SFLYQ 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.Wec ...

  9. MySQL 5.6 Reference Manual-14.3 InnoDB Transaction Model and Locking

    14.3 InnoDB Transaction Model and Locking 14.3.1 InnoDB Lock Modes 14.3.2 InnoDB Record, Gap, and Ne ...

  10. Map使用操作系统内存的情况

    public static void main(String[] args) { System.out.println("程序启动-->可用内存:"+(getSystemMe ...