仿掌上英雄联盟能力值分析效果

本文详细介绍了一种使用三角函数和旋转角度掌控技巧绘制多边形的方法,包括中心线、多边形各点坐标的计算过程,以及如何绘制字体和进度条。提供了GitHub上的源码链接供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原始效果图:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

模仿效果:

095852_Z5Eg_1771562.gif

动图:

095852_FHl3_1771562.gif

 

流程

  • 绘制中心线,用于计算外层多边形各点的坐标

  • 绘制最外层多边形

  • 分析原型图算出每个多边形之间的间距

  • 绘制里三层多边形

  • 绘制字体

  • 根据进度值绘制等级进度

 

难点

关键在于坐标的计算(三角函数的运用,哈哈),与旋转角度的掌控。

 

绘制中心线

095852_V0KL_1771562.gif

095852_BC7w_1771562.gif

先计算出圆心到A点的坐标,在计算出旋转的角度(360/7),然后旋转7次Canvas,绘制7条中心线。

为了加深显示效果,先绘制一个绿色背景作参考。

095852_U6gr_1771562.gif

 

绘制最外层七边形

095852_GsRx_1771562.gif

各坐标点的计算主要用到了三角函数。

A点

x : 对应圆心center。

y :paddingTop+2个字体高度的距离

B点

095852_VMxP_1771562.gif

x : A点的x坐标+EB

利用三角函数公式,BE=sin(AB的夹角)*OB

这里有个坑,Math.sin(x)里的x是弧度,而不是角度。

如果要计算角度则需要加上Math.sin(Math.toRadians(x))

center+ Math.sin(Math.toRadians(360/7)) *one_radius

y :A点的y坐标+AE

同理AE=OA-OE,OE=cos(AB的夹角)*OB

OE=cos(AB的夹角)*OB

Math.abs(Math.cos(Math.toRadians(360/7)) *one_radius

由于余弦有正负值,这里要取绝对值

AE=OA-OE

(getPaddingTop() +2*str_rect.height() + one_radius -Math.abs(Math.cos(Math.toRadians(360/7)) *one_radius))

C点

095852_Yi95_1771562.gif

x :圆心X+FC

Math.sin(Math.toRadians(360/7+360/7/2)) *one_radius

y: 圆心Y+OF

(Math.cos(Math.toRadians(360/7+360/7/2)) *one_radius) +center

D点

095852_AoAc_1771562.gif

x :圆心x+HD

center+ Math.sin(Math.toRadians(360/7/2)) *one_radius

y:圆心y+OH

Math.cos(Math.toRadians(360/7/2)) *one_radius) +center

右边点绘制完后,左边点自然就简单了,y位置一样,x位置只需要把相加改成相减即可。

095852_dhMT_1771562.gif

 

绘制内三层正七边形

绘制完最外层七边形后,剩下来的就好办了,只需要计算出每个七边形的间距即可。

由原型图分析,每一个正七边形占半径的四分之一。

095852_w1ke_1771562.gif

095852_imls_1771562.gif

095852_WfHI_1771562.gif

去掉绿色背景后,显示的效果:

095852_7QtJ_1771562.gif

 

绘制字体

根据最外层多边形各点坐标以及字体的 长度高度 微调。

095852_kgF5_1771562.gif

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

 

绘制各能力值进度

 

640?wx_fmt=png&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

感兴趣的同学可直接到github下载源码查看:

https://github.com/jiangzehui/polygonsview

转载于:https://my.oschina.net/JiangTun/blog/912988

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值