热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidAChartEnginee讲解之源码框架解读

从上周把androidACHartEnginee的源码checkout出来后就一直在看这个东西是如何使用的,以及底层是如何实现的,把最近一周对这个东西的了解先发上来,即是给自己做一个

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

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

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


推荐阅读
  • 0.Linux环境搭建 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 4HTTP响应报文
    1.HTTP响应报文分析HTTP响应报文效果图:响应报文说明:---响应行状态行---HTTP1.1200OK#HTTP协议版本状态码状态描述---响应头---Server:Ten ... [详细]
  • 原文:WhatEngineersNeedtoKnowaboutCommunicationProtocolsWhenChoosingIoTManagementSoftw ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
author-avatar
手机用户2502887703
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有