网状图的应用很常见了 大多数用在用户分析 比如战斗力图表等等

简单的描述下 流程吧 下面直接用六边形的例子

1.第一步首先要分析绘制出六个角的位置
画几何图形 一般都用path去绘制
先计算出六个角度的大小 网状图的半径

//角度
/*PI就是圆周率π,PI是弧度制的π,也就是180°
所以,Math.PI = 3.14 = 180°
ps,PI是一个浮小数*/
//angle = 180°*2 / 6 = 1.04 = 60°
float angle = (float) (Math.PI * 2 / 6); //网状图的半径大小
int radius = 300;
//开始绘制Path path = new Path();
// 起点path.moveTo(centerX, centerY - curR);
//延伸路径
for (int j = 0; j <6; j++) {endX = (float) (centerX + curR * Math.sin(angle * j));endY = (float) (centerY - curR * Math.cos(angle * j));path.lineTo(endX, endY);}
//闭环path.close();
绘制canvas.drawPath(path, polygonPaint);

形状到此就绘制玩了

2.第二部绘制对角线的位置

//其实和形状一样 唯一的区别就是 起始点位置Path path = new Path();for (int i = 0; i <6; i++) {path.reset();path.moveTo(centerX, centerY);float x = (float) (centerX + radius * Math.sin(angle * i));float y = (float) (centerY - radius * Math.cos(angle * i));path.lineTo(x, y);canvas.drawPath(path, linsPaint);}

3.最后一步绘制区域的百分比

//区域也和绘制形状一样 唯一的区别就是 半径要根据 最大阀值百分比换算
for (int j = 0; j < data.size(); j++) {float curR = radius * data.get(j).getValue() / maxValue;//当前半径float endX = (float) (centerX + curR * Math.sin(angle * j));float endY = (float) (centerY - curR * Math.cos(angle * j));if (j == 0) {path.moveTo(endX, endY);}path.lineTo(endX, endY);}path.close();

到此 绘制 形状就结束了

简单的封装了个demo 支持大于3的边角网状图

ReticularView

网状结构图 支持各种颜色 方法详情可见源码注释 三边 4边 12边 都可以




github

android 自定view 网状结构图相关推荐

  1. android 自定义园动画,Android 自定View实现仿QQ运动步数圆弧及动画效果

    在之前的Android超精准计步器开发-Dylan计步中的首页用到了一个自定义控件,和QQ运动的界面有点类似,还有动画效果,下面就来讲一下这个View是如何绘制的. 1.先看效果图 2.效果图分析 功 ...

  2. Android 自己定义View须要重写ondraw()等方法

    Android  自己定义View须要重写ondraw()等方法.这篇博客给大家说说自己定义View的写法,须要我们继承View,然后重写一些 方法,方法多多,看你须要什么方法 首先写一个自己定义的V ...

  3. android canvas_Android 自定义View篇(七)实现环形进度条效果

    前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...

  4. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  5. android中实现view的更新有两组方法

    android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用.     Android提供了 ...

  6. Android刷新机制-View绘制原理

    Android刷新机制-View绘制原理 Android刷新机制-SurfaceFlinger原理 Android刷新机制-Choreographer原理 一.概述 本文将从startActivity ...

  7. Caused by: java.lang.ClassNotFoundException: Didn't find class android.support.v4.view.ViewPager

    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.ViewPag ...

  8. 精通android布局,Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...

    标题图 UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个 ...

  9. android view取坐标点,Android 获取子 View 的位置及坐标的方式

    一.View 1.1.View 概述 视图 (View) 是一个容器,专门负责布局.表现为显示在屏幕上的各种视图,如 TextView.LinearLayout 等. 1.2.View 分类 View ...

最新文章

  1. 扩增子分析QIIME. 3以管理员安装QIIME1.9.1至Ubuntu16.04
  2. 【推荐】大型网站图片服务器架构的演进
  3. springboot中java泛型使用
  4. [ An Ac a Day ^_^ ] CodeForces 691F Couple Cover 花式暴力
  5. 函数式编程之-模式匹配(Pattern matching)
  6. 程序员面试金典 - 面试题 04.09. 二叉搜索树序列(双端队列+回溯)**
  7. 使用“管道”与“应用程序生命周期”重构:可插拔模块
  8. dockerfile制作镜像及k8s中应用
  9. 国内最火的10款Java开源项目,都是国人开发,CMS居多
  10. js如何实现数组随机排序【附洗牌算法心得】
  11. MacOS之连接蓝牙音箱卡顿解决方案(六)
  12. Linux 基础总结,这一篇就够了!
  13. 打开小地图并标记目标地点
  14. 10月书讯丨10本新书为你充电
  15. 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置!
  16. C语言:比较三个数(double类型)的大小
  17. iPhone4 iOS 5.1.1 越狱之后必装的插件
  18. cron表达式生成函数(小时部分自定义) 1小时30分钟,1小时20分钟,1小时40分钟..
  19. 天呐!Linus两周搞出个Git,快来看看咋用滴!
  20. python 漏洞扫描器_SRCHunter Python开源漏洞扫描器

热门文章

  1. envoy做集中式egress sidecar
  2. 微信公众号开发(1)--微信公众平台与后台服务器
  3. android实现自动评论脚本,自动点击器评论器app下载
  4. WECHAT 微信扫码关注公众号方法无法获取头像和昵称了
  5. webflux 之 Stream流
  6. flume自定义拦截器开发步骤
  7. 不懂java,这篇文章带你入门起飞
  8. 测试工程师的能力分类
  9. 清明祭扫html5,精选清明节扫墓随笔作文500字5篇
  10. AMADA阿玛达JAE工控机维修UT5-AMD9-B故障汇总