首先看一下小黑盒的效果图

接下来开始撸码,先贴上雷达图的属性

1.确立中心点的坐标

2.绘制多边形。我们通过Paint绘制path的方式来绘制多边形,有四个多边形并且大小逐次递减,那我们的radarCount就定义为4,通过循环来绘制出4个多边形,每个多边形的半径的都是递减的,所以我们可以把最大的半径分成四份,通过遍历的索引来除以4,得到每一个半径的百分比,这样我们就可以确定每一个多边形的半径了。

而每一个多边形的角的坐标位置我们可以通过每个角所在的弧度来计算。

(1)计算每个角的坐标

(2)绘制多边形(path.close()一定要调用,不然无法形成闭合回路)

效果图1:

3.绘制每个角与中心点的连接线(其实只要连接最外层的)

效果图2:

4.绘制覆盖区域

效果图3:

5.绘制文字

(1)绘制各个属性的值

private void drawTextValue(Canvas canvas) {radarPaint.setColor(Color.WHITE);radarPaint.setTextSize(radarValueSize);radarPaint.setStyle(Paint.Style.STROKE);int x;int y;float textValueWidth;for (int i = 0; i < data.length; i++) {x = getPoint(i).x;y = getPoint(i).y;//值的文字宽度textValueWidth = radarPaint.measureText(String.valueOf(data[i]));if (i == 1) {//计算索引为0位置的x轴坐标, x为多边形当前夹角的坐标,将其减去文字宽度,是为了保持居中显示//然后向又位移1/3个半径是让该文字不遮挡雷达图//同时同索引位的属性的文字也会向左位移1/3个半径,保证居中显示x = (int) (x - textValueWidth / 2 + radius / 3);y += radarValueSize;} else if (i == 2) {//让文字坐标向左位移文字宽度的一半,保持居中显示x -= textValueWidth / 2;y = (int) (y + radarTextMargin + radarValueSize + radarDescSize);} else if (i == 3) {x -= textValueWidth / 2;y = (int) (y + radarValueSize + radarTextMargin + radarDescSize);} else if (i == 4) {//计算索引为3位置的x轴坐标, x为多边形当前夹角的坐标,将其减去文字宽度,是为了保持居中显示//然后向又位移1/3个半径是让该文字不遮挡雷达图//同时同索引位的属性的文字也会向左位移1/3个半径,保证居中显示x = (int) (x - textValueWidth / 2 - radius / 3);y += radarValueSize;} else if (i == 0) {x -= textValueWidth / 2;y -= radarTextMargin;}canvas.drawText(String.valueOf(data[i]), x, y, radarPaint);}}

(2)绘制各个属性的名称

 private void drawTextDesc(Canvas canvas) {radarPaint.setColor(Color.WHITE);radarPaint.setTextSize(radarDescSize);radarPaint.setStyle(Paint.Style.STROKE);int x;int y;float textDescWidth;for (int i = 0; i < data.length; i++) {x = getPoint(i).x;y = getPoint(i).y;//属性的文字宽度textDescWidth = radarPaint.measureText(String.valueOf(dataDesc[i]));//值的文字宽度if (i == 1) {//计算索引为0位置的x轴坐标, x为多边形当前夹角的坐标,将其减去文字宽度,是为了保持居中显示//然后向又位移1/3个半径是让该文字不遮挡雷达图//同时同索引位的值的文字也会向右位移1/3个半径,保证居中显示x = (int) (x - textDescWidth / 2 + radius / 3);} else if (i == 2) {//让文字坐标向左位移文字宽度的一半,保持居中显示x -= textDescWidth / 2;y = (int) (y + radarTextMargin + radarDescSize);} else if (i == 3) {x -= textDescWidth / 2;y = (int) (y + radarTextMargin + radarDescSize);} else if (i == 4) {//计算索引为3位置的x轴坐标, x为多边形当前夹角的坐标,将其减去文字宽度,是为了保持居中显示//然后向又位移1/3个半径是让该文字不遮挡雷达图//同时同索引位的值的文字也会向右位移1/3个半径,保证居中显示x = (int) (x - textDescWidth / 2 - radius / 3);} else if (i == 0) {x -= textDescWidth / 2;y = (int) (y - radarTextMargin - radarValueSize);}canvas.drawText(String.valueOf(dataDesc[i]), x, y, radarPaint);}}

6.不要忘记在onDraw方法调用各个绘制方法

大功告成!最终效果图如下

要看源码请点击github地址

安卓仿小黑盒绝地求生雷达图相关推荐

  1. 微信小程序使用echarts雷达图遇到的坑

    最近一个医院的小程序需要使用雷达图来展示,简单总结一下. 1:使用场景:在详情页,根据测试的题目得分画成雷达图,测试的题目会得到2种结果,高危和低危.一种雷达图,但是样式不一样.如果是标题文字颜色不用 ...

  2. 小云讲可视化 | 雷达图Radar

    云视界,是服务于工业领域的云端可视化工具,拖拉拽即可完成组件自由配置与布局.所见即所得,无需编程就能轻松搭建可视化大屏.本文介绍云视界可视化组件之一:雷达图. 什么是雷达图 雷达图是专门用来进行多指标 ...

  3. android pc游戏模拟器哪个好用,安卓模拟器吃鸡,哪款更好用? PC玩《绝地求生:刺激战场》实战体验...

    原标题:安卓模拟器吃鸡,哪款更好用? PC玩<绝地求生:刺激战场>实战体验 动图:会隐身的小球球 腾讯正版授权的吃鸡手游已经上线一段时间了,和PC版相比还原度算是很高了,所以人气相当火爆. ...

  4. 全军出击 iOS和Android,绝地求生全军出击ios和安卓数据互通吗 安卓苹果可以添加好友一起玩吗...

    全军出击安卓和IOS可以互相添加好友么,ios和安卓数据互通吗,安卓苹果可以联机一起玩吗?全军出击ios和安卓是两个不同的系统,能不能在一起玩呢?毕竟游戏重在和朋友一起开黑才有意思,下面小编就为大家带 ...

  5. 找个可以做绝求生雷达辅助的需要什么专业

    工作室刚成立不久 想找个能做绝地求生雷达辅助的,做了好多功课 也不知道该找学哪方面专业的人才 最开始找了游戏开发 软件开发 问了好多人都说不会,各位大神能否告诉我,我该找个学什么专业的人才能做出来, ...

  6. 雷达图-高效数据解读

    雷达图又被叫做蜘蛛网图,适用于显示三个或更多的维度的变量.大家最熟悉的莫过于游戏中的数据分析(如下图). 雷达图是以在同一点开始的轴上显示三个或更多个变量的二维图表形式来显示多元数据的方法,其中轴的相 ...

  7. 智能数据可视化-雷达图的使用方法

    在进行数据报表综合评价分析时,往往涉及很多指标,需要将指标与参照值一一比较,往往会顾此失彼,难以得出一个综合的分析评价.这时便借助数据可视化图-雷达图. 雷达图是专门用来进行多指标体系比较分析的专业图 ...

  8. 绝地求生正版电脑从哪个平台下载?这有两种方法

    绝地求生正版电脑从哪个平台下载?<绝地求生:刺激战场>由光子工作室群打造,投入了超过200人精英研发.真实的地图与建筑.枪械射击手感与弹道.载具驾驶与物理碰撞,甚至真实的3D音效也得以高度 ...

  9. android 麦克风权限设置,绝地求生刺激战场麦克风权限怎么设置?刺激战场麦克风权限设置方法[多图]...

    绝地求生刺激战场麦克风权限有哪些方法设置?麦克风可以和玩家之间进行沟通,但是有时候开了语音也没有声音,下面就让安卓乐园小编为大家带来,刺激战场麦克风权限设置方法. 绝地求生刺激战场语音怎么没声音 1. ...

最新文章

  1. Win10+tensorflow:SSD调试问题:Unable to open table file ../checkpoints/ssd_300_vgg.ckpt
  2. [easyui] 在iframe中操作父窗口的组件
  3. JSP 获得服务器时间和浏览器时间
  4. Java中特质模式的定义
  5. Windows Server 2003 DNS服务安装篇
  6. 力扣:组合总和 II DFS剪枝
  7. C++primer 第 3 章 字符串、向量和数组 3.1 命名空间的using声明 3.2标准库类型string
  8. python直方图教程_python如何画直方图
  9. html与js简单小游戏,JS实现简单贪吃蛇小游戏
  10. 淘宝TDDL深入浅出
  11. 编写可维护的javascript 笔记2(注释)
  12. 动力小帆船制作方法简单,电动小帆船制作方法
  13. 2021-08-27小白笔记3
  14. 批处理命令之Start的详细用法
  15. 好文推荐(十六)——Git使用详细教程
  16. 洛谷P2123 皇后游戏
  17. AWTK-MVVM 在 STM32H743 上的移植笔记
  18. e2e测试稳定如何保障
  19. Ubuntu服务器上运行mma,一、MMA概述
  20. 图论初步(存储+最短路)

热门文章

  1. shell 知:sed
  2. 原理图checklist
  3. RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
  4. 什么是web前端?web前端前景怎么样?
  5. 苹果手机闹钟声音大小怎么调_电脑上什么便签备忘录软件可以像闹钟那样按时提醒我们做事?...
  6. Non-static method ‘insert(T)‘ cannot be referenced from a static context
  7. 基于深度学习的人脸识别
  8. Android Design 官方文档离线版(英文)!
  9. 怎么查看计算机显卡类型,如何查看电脑显卡支持类型?查看显卡支持类型方法...
  10. Linux系统之磁盘分区(基本分区和LVM逻辑卷分区)