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,来让我们去做显示。

以上就是我对这个开源工程宏观上的一些理解,具体的实现步骤也不想深入的去看了,实在是挺难懂的,只要我们从整体上了解了这个工程不同的类的作用,能够熟练的应用,就可以了。

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

时间: 2024-12-24 02:29:19

android AChartEnginee讲解之源码框架解读的相关文章

Android 上千实例源码分析以及开源分析

Android 上千实例源码分析以及开源分析(百度云分享) 要下载的直接翻到最后吧,项目实例有点多. 首先 介绍几本书籍(下载包中)吧. 01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 06_Android的GUI系统 07_Android的Audio系统 08_Android的Video 输入输出系统 09_Android的多媒体系统 10_

android 近百个源码项目【转】

http://www.cnblogs.com/helloandroid/articles/2385358.html Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个最佳方式.下面推荐几个应用开源项目,这些项目不仅提供了优秀的创意,也可以直接掌握 Android内核的接口使用: 1.Android团队提供的示例项目 如果不是从学习Android S

android插件化-apkplugdemo源码阅读指南-10

阅读本节内容前可先了解 apkplug基础教程 本教程是基于apkplug V1.6.8 版本编写  最新开发方式以官网为准 可下载最新的apkplugdemo源码http://git.oschina.net/plug/apkplugDemos apkplugdemo演示图 一 apkplugdemo工程源码结构 src |-com.apkplugdemo.adapter             --插件列表Adapter |-com.apkplugdemo.adapter.base     

Android消息处理机制:源码剖析Handler、Looper,并实现图片异步加载

引言 我们在做 Android 开发时,常常需要实现异步加载图片/网页/其他.事实上,要实现异步加载,就需要实现线程间通信,而在 Android 中结合使用 Handler.Looper.Message 能够让不同的线程通信,完成异步任务.虽然 Android 官方为我们提供了 AsyncTask 类来完成异步任务,但这个类存在许多问题,并不好用,而且,AsyncTask 也是通过 Handler 和 Thread 来实现异步加载的,所以学习这方面的知识是有必要的 本文讲解思路大致如下:绘制 A

【转】Android 带你从源码的角度解析Scroller的滚动实现原理

今天给大家讲解的是Scroller类的滚动实现原理,可能很多朋友不太了解该类是用来干嘛的,但是研究Launcher的朋友应该对他很熟悉,Scroller类是滚动的一个封装类,可以实现View的平滑滚动效果,什么是实现View的平滑滚动效果呢,举个简单的例子,一个View从在我们指定的时间内从一个位置滚动到另外一个位置,我们利用Scroller类可以实现匀速滚动,可以先加速后减速,可以先减速后加速等等效果,而不是瞬间的移动的效果,所以Scroller可以帮我们实现很多滑动的效果. 在介绍Scrol

放大招了!基于Bmob的Android即时通讯应用源码[升级版]

此帖为  放大招了!基于Bmob的Android即时通讯应用源码 (一) 续篇,主要是更新的功能. 一.更新更能: 1.新增支持陌生人聊天,允许发送给非好友用户: 2.新增支持自定义消息发送,便于开发者扩展: 3.新版本大幅度增加稳定性和及时性,保证百分百到达: 4.排除web后端推送对客户端的影响. 二.更新讲解: 1.如果你希望能和所有人(不局限于好友关系)进行聊天,那么这一版本就解决了这个问题. 如果你想看到效果,可以点击附近的人,你找到一个非好友用户,再查看他的资料,这一页面下方有个"发

深度理解Android InstantRun原理以及源码分析

深度理解Android InstantRun原理以及源码分析 @Author 莫川 Instant Run官方介绍 简单介绍一下Instant Run,它是Android Studio2.0以后新增的一个运行机制,能够显著减少你第二次及以后的构建和部署时间.简单通俗的解释就是,当你在Android Studio中改了你的代码,Instant Run可以很快的让你看到你修改的效果.而在没有Instant Run之前,你的一个小小的修改,都肯能需要几十秒甚至更长的等待才能看到修改后的效果. 传统的代

Android增加v7 appcompat源码

1.File ---- Import---- Existing Android Code Into Workspace 2.选择 <sdk>/extras/android/support/v7/appcompat/导入进来 3.去github上查找,"platform framework support",下载下来后解压,里面包含了v4,v7,v13的源码 4.在我们第2步导入的appcompat项目的libs下建立一个"android-support-v7-ap

[Android阅读代码]android-async-http源码学习一

android-async-http 下载地址 一个比较常用的Http请求库,基于org.apache.http对http操作进行封装. 特点: 1.每一个HTTP请求发生在UI线程之外,Client通过回调处理HTTP请求的结果,使得Client代码逻辑清晰 2.每一个请求使用线程池管理执行 3.支持gzip , cookie等功能 4.支持自动重试连接功能 [Android阅读代码]android-async-http源码学习一,布布扣,bubuko.com