写一个android图表框架1
前言
- 在两年前,做过一个几乎全部是图表展示的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相关推荐
- Android MVVM封装,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现
MVVM 这是一个android MVVM 框架,基于谷歌dataBinding技术实现.dataBinding 实现的 V 和 VM的关联:使用IOC架构实现了 M 和 V的关联. 框架具有以下功能 ...
- android mvvm官方文档,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现
MVVM 这是一个android MVVM 框架,基于谷歌dataBinding技术实现.dataBinding 实现的 V 和 VM的关联:使用IOC架构实现了 M 和 V的关联. 框架具有以下功能 ...
- android+捕获google账户+cancel按钮,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现...
MVVM 这是一个android MVVM 框架,基于谷歌dataBinding技术实现.dataBinding 实现的 V 和 VM的关联:使用IOC架构实现了 M 和 V的关联. 框架具有以下功能 ...
- Android热更新十:自己写一个Android热修复
很早之前就想深入的研究和学习一下热修复,由于时间的原因一直拖着,现在才执笔弄起来. Android而更新系列: Android热更新一:JAVA的类加载机制 Android热更新二:理解Java反射 ...
- 从 0 开始手写一个 Spring MVC 框架,向高手进阶
转载自 从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...
- 写一个Android输入法01——最简步骤
本文演示用Android Studio写一个最简单的输入法.界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点. 1.打开Android Studio创建项目,该项目和普通APP的 ...
- 自己手写一个Spring MVC框架
想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...
- android splash 公司,正确地写一个Android Splash页面
正确地写一个Android Splash页面 打开APP立即进入应用的主页面并呈现出用户想要的内容,对于用户来讲是最好的体验.但是通常APP在启动时需要进行一系列的初始化.网络加载等耗时的操作,因此启 ...
- 深入理解JDK动态代理原理,使用javassist动手写一个动态代理框架
文章目录 系列文章索引 一.动手实现一个动态代理框架 1.初识javassist 2.使用javassist实现一个动态代理框架 二.JDK动态代理 1.编码实现 2.基本原理 (1)getProxy ...
最新文章
- python生日提醒_python, 实现朋友家人年历生日自动提醒
- 在node.js中一次读取一行文件?
- php encode 数组,PHP中json_encode转换数组时要注意的地方
- activiti根据当前节点获取下一个UseTask节点
- truncate、drop、delete区别
- Python自建collections模块
- 8266串口调试助手_200行Python代码实现串口调试助手(2) 界面构建
- Replace Type Code with State/Strategy(以State/Strategy取代类型码)
- 【干货】10张GIF动图让你弄懂循环、递归、二分检索等概念
- java中修改密码_java中用户密码加密时增加和修改的代码
- Outlook 邮箱备份操作手册
- 计算机在医疗领域的发展未来,5G医疗在人工智能领域未来的发展
- proto3文件定义Demo-用户表单条、多条、所有、编辑
- 进度计划中的时间相关术语
- 对称矩阵的逆矩阵也是对称矩阵吗
- (附源码)Springboot小型仪器公司生产管理系统 毕业设计 031853
- Linux 配置 VNC 远程桌面
- 采样频率,采样率,转换速率
- 攒机笔记二十:改造笔记本电脑(华硕A555L)
- JavaScript - 动画介绍与学习
热门文章
- 毕马威发布《人工智能无处不在》研究报告:人工智能在五大行业的成就与挑战...
- PNAS:张航课题组揭示人类为何“扭曲”概率信息
- 揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活【附下载】| 智东西内参...
- ARM与RISC-V之争,后起之秀的优势在哪儿?
- 一文看透汽车芯片!巨头布局技术路线全解密【附下载】| 智东西内参
- 2017年中国人工智能产业专题研究报告(完整版)
- AI 还原宋代皇帝,原来这么帅?!
- 别再盲目学 Python 了!
- 使用scrapy抓取股票代码
- Reddit引入Envoy支持架构改造,性能显著提升