android 自定view 网状结构图
网状图的应用很常见了 大多数用在用户分析 比如战斗力图表等等
简单的描述下 流程吧 下面直接用六边形的例子
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 网状结构图相关推荐
- android 自定义园动画,Android 自定View实现仿QQ运动步数圆弧及动画效果
在之前的Android超精准计步器开发-Dylan计步中的首页用到了一个自定义控件,和QQ运动的界面有点类似,还有动画效果,下面就来讲一下这个View是如何绘制的. 1.先看效果图 2.效果图分析 功 ...
- Android 自己定义View须要重写ondraw()等方法
Android 自己定义View须要重写ondraw()等方法.这篇博客给大家说说自己定义View的写法,须要我们继承View,然后重写一些 方法,方法多多,看你须要什么方法 首先写一个自己定义的V ...
- android canvas_Android 自定义View篇(七)实现环形进度条效果
前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...
- Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...
UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...
- android中实现view的更新有两组方法
android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了 ...
- Android刷新机制-View绘制原理
Android刷新机制-View绘制原理 Android刷新机制-SurfaceFlinger原理 Android刷新机制-Choreographer原理 一.概述 本文将从startActivity ...
- 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 ...
- 精通android布局,Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...
标题图 UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个 ...
- android view取坐标点,Android 获取子 View 的位置及坐标的方式
一.View 1.1.View 概述 视图 (View) 是一个容器,专门负责布局.表现为显示在屏幕上的各种视图,如 TextView.LinearLayout 等. 1.2.View 分类 View ...
最新文章
- 扩增子分析QIIME. 3以管理员安装QIIME1.9.1至Ubuntu16.04
- 【推荐】大型网站图片服务器架构的演进
- springboot中java泛型使用
- [ An Ac a Day ^_^ ] CodeForces 691F Couple Cover 花式暴力
- 函数式编程之-模式匹配(Pattern matching)
- 程序员面试金典 - 面试题 04.09. 二叉搜索树序列(双端队列+回溯)**
- 使用“管道”与“应用程序生命周期”重构:可插拔模块
- dockerfile制作镜像及k8s中应用
- 国内最火的10款Java开源项目,都是国人开发,CMS居多
- js如何实现数组随机排序【附洗牌算法心得】
- MacOS之连接蓝牙音箱卡顿解决方案(六)
- Linux 基础总结,这一篇就够了!
- 打开小地图并标记目标地点
- 10月书讯丨10本新书为你充电
- 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置!
- C语言:比较三个数(double类型)的大小
- iPhone4 iOS 5.1.1 越狱之后必装的插件
- cron表达式生成函数(小时部分自定义) 1小时30分钟,1小时20分钟,1小时40分钟..
- 天呐!Linus两周搞出个Git,快来看看咋用滴!
- python 漏洞扫描器_SRCHunter Python开源漏洞扫描器