前言

  • 在两年前,做过一个几乎全部是图表展示的App,当时真是一脸懵逼。找来找去找到了MpAndroidChart这个框架,在使用这个框架一个多月的时间里面,对Canvas慢慢的认识了,后面接触Html5 的Canvas,发现有点触类旁通的感觉。有一天,我无聊,上班实在没事,觉得我应该也可以写个小图表。写着写着,我发现越写越多。绘图其实没有想象中复杂。
  • github.com/huangyanbin…

图表基本结构

  • 如何画一个图表,首先要了解一个图表的基本属性,大概就是这样的。
    [

    我们想着这么画出来呢?

框架基础

  • 假设让我们绘制这个图表,首先来分析一下,最外面是标题,然后是Legend(图例),坐标,最后是图表内容。好了,我们可以想到BaseChart里面有哪些成员了,(标题,图例,坐标,内容)。我们新建一个BaseChart extends view.

绘制图表标题

  • 通过onSizeChanged()方法我们可以拿到View的大小,然后可以得到BaseChart的Rect即(0,0,width,height).新建一个类BaseChartTitle,我们定义4个常量代表Title位置。然后定义一个percent,标题占比多少。提供set get方法。
    int LEFT = 0;int TOP = 1;int RIGHT =2;int BOTTOM = 3;复制代码
  • 开始绘制标题,首先通过计算我们已经得到startX,startY,通过paint得到文字长度和宽度。
   @Overridepublic void drawTitle(Canvas canvas, Rect rect, Paint paint) {fontStyle.fillPaint(paint);String chartName = chartData.getChartName();Paint.FontMetrics fontMetrics = paint.getFontMetrics();float textHeight = fontMetrics.descent - fontMetrics.ascent;int textWidth = (int)paint.measureText(chartName);int startX,startY;Path path = new Path();switch (titleDirection) {case TOP:startY = (int) (rect.top + rect.height() * percent/2);startX = rect.centerX();startY-= textHeight/2;startX -=textWidth/2;canvas.drawText(chartName, startX, startY, paint);break;case LEFT:startX = (int) (rect.left +  rect.width() * percent/2);startX -= textWidth/2;path.moveTo(startX,rect.top);path.lineTo(startX,rect.bottom);canvas.drawTextOnPath(chartName,path,rect.width()/2-textWidth/2,0,paint);break;case RIGHT:startX = (int) (rect.right - rect.width()* percent/2);startX -= textHeight/2;path.moveTo(startX,rect.top);path.lineTo(startX,rect.bottom);canvas.drawTextOnPath(chartName,path,rect.width()/2-textWidth/2,0,paint);break;case BOTTOM:startY = (int) (rect.bottom - rect.height() * percent/2);startX =  rect.centerX();startY -= textHeight/2;startX -=textWidth/2;canvas.drawText(chartName, startX, startY, paint);break;}}复制代码
  • 当Left和Right绘制标题时,应该是竖向的,所以用canvas.drawTextOnPath方法,当Top和Bottom时,可以使用canvas.drawText方法。

转载于:https://juejin.im/post/59e59c51f265da430e4e3a80

写一个android图表框架1相关推荐

  1. Android MVVM封装,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现

    MVVM 这是一个android MVVM 框架,基于谷歌dataBinding技术实现.dataBinding 实现的 V 和 VM的关联:使用IOC架构实现了 M 和 V的关联. 框架具有以下功能 ...

  2. android mvvm官方文档,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现

    MVVM 这是一个android MVVM 框架,基于谷歌dataBinding技术实现.dataBinding 实现的 V 和 VM的关联:使用IOC架构实现了 M 和 V的关联. 框架具有以下功能 ...

  3. android+捕获google账户+cancel按钮,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现...

    MVVM 这是一个android MVVM 框架,基于谷歌dataBinding技术实现.dataBinding 实现的 V 和 VM的关联:使用IOC架构实现了 M 和 V的关联. 框架具有以下功能 ...

  4. Android热更新十:自己写一个Android热修复

    很早之前就想深入的研究和学习一下热修复,由于时间的原因一直拖着,现在才执笔弄起来. Android而更新系列: Android热更新一:JAVA的类加载机制 Android热更新二:理解Java反射 ...

  5. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  6. 写一个Android输入法01——最简步骤

    本文演示用Android Studio写一个最简单的输入法.界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点. 1.打开Android Studio创建项目,该项目和普通APP的 ...

  7. 自己手写一个Spring MVC框架

    想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...

  8. android splash 公司,正确地写一个Android Splash页面

    正确地写一个Android Splash页面 打开APP立即进入应用的主页面并呈现出用户想要的内容,对于用户来讲是最好的体验.但是通常APP在启动时需要进行一系列的初始化.网络加载等耗时的操作,因此启 ...

  9. 深入理解JDK动态代理原理,使用javassist动手写一个动态代理框架

    文章目录 系列文章索引 一.动手实现一个动态代理框架 1.初识javassist 2.使用javassist实现一个动态代理框架 二.JDK动态代理 1.编码实现 2.基本原理 (1)getProxy ...

最新文章

  1. python生日提醒_python, 实现朋友家人年历生日自动提醒
  2. 在node.js中一次读取一行文件?
  3. php encode 数组,PHP中json_encode转换数组时要注意的地方
  4. activiti根据当前节点获取下一个UseTask节点
  5. truncate、drop、delete区别
  6. Python自建collections模块
  7. 8266串口调试助手_200行Python代码实现串口调试助手(2) 界面构建
  8. Replace Type Code with State/Strategy(以State/Strategy取代类型码)
  9. 【干货】10张GIF动图让你弄懂循环、递归、二分检索等概念
  10. java中修改密码_java中用户密码加密时增加和修改的代码
  11. Outlook 邮箱备份操作手册
  12. 计算机在医疗领域的发展未来,5G医疗在人工智能领域未来的发展
  13. proto3文件定义Demo-用户表单条、多条、所有、编辑
  14. 进度计划中的时间相关术语
  15. 对称矩阵的逆矩阵也是对称矩阵吗
  16. (附源码)Springboot小型仪器公司生产管理系统 毕业设计 031853
  17. Linux 配置 VNC 远程桌面
  18. 采样频率,采样率,转换速率
  19. 攒机笔记二十:改造笔记本电脑(华硕A555L)
  20. JavaScript - 动画介绍与学习

热门文章

  1. 毕马威发布《人工智能无处不在》研究报告:人工智能在五大行业的成就与挑战...
  2. PNAS:张航课题组揭示人类为何“扭曲”概率信息
  3. 揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活【附下载】| 智东西内参...
  4. ARM与RISC-V之争,后起之秀的优势在哪儿?
  5. 一文看透汽车芯片!巨头布局技术路线全解密【附下载】| 智东西内参
  6. 2017年中国人工智能产业专题研究报告(完整版)
  7. AI 还原宋代皇帝,原来这么帅?!
  8. 别再盲目学 Python 了!
  9. 使用scrapy抓取股票代码
  10. Reddit引入Envoy支持架构改造,性能显著提升