Android自定义View:雷达图/蜘蛛网图

运行效果图

雷达图结构分析

对雷达图进行结构拆分,得到一个清晰的思路,这些结构也就是需要绘制的部分。为了能够有更好的扩展性,我将它们作为可定制的属性暴露出来,以下是结构属性表:

结构相关属性描述
boneboneColor骨架颜色
-boneWidth骨架宽度
netnetColor网线颜色
-netWidth网线宽度
nodenodeColor结点颜色
-nodeRadius结点半径
covercoverColor覆盖层(由各种属性的值组成的覆盖层)颜色
texttextColor文本颜色
-textSize文本大小
-labelMargin文本与雷达图间距

如何使用?以下是上面效果图的代码:

xml
<win.smartown.library.radarview.RadarView
    android:id="@+id/radar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:boneColor="#5392FF"
    app:boneWidth="0.5dp"
    app:coverColor="#380392FF"
    app:labelMargin="10dp"
    app:netColor="#5392FF"
    app:netWidth="1dp"
    app:nodeColor="#53AFFF"
    app:nodeRadius="3dp"
    app:textColor="#868686"
    app:textSize="12sp">
</win.smartown.library.radarview.RadarView>
复制代码
设置适配器
        RadarView radarView = findViewById(R.id.radar);
        radarView.setAdapter(new RadarAdapter() {
            @Override
            public int getItemCount() {
                return 12;
            }

            @Override
            public int getMaxValue() {
                return 5;
            }

            @Override
            public int getValue(int position) {
                if (position > getMaxValue()) {
                    return getMaxValue();
                }
                return position;
            }

            @Override
            public String getName(int position) {
                return "Label" + position;
            }
        });
复制代码

难点总结

  • 主要就是要计算各个点的坐标,每一个交叉点的坐标需要计算出来,好在这是一个非常标准的数学模型,可以通过公式计算出来,以下是计算坐标的代码:
//[centerX,centerY]为中心点坐标,radius为待求坐标到中心点的距离
float x = (float) (centerX + radius * Math.cos(degree * Math.PI / 180));
float y = (float) (centerY + radius * Math.sin(degree * Math.PI / 180));
复制代码

最后放上源码

github.com/smartown/Cu…

转载于:https://juejin.im/post/5c04cb7151882517165dc6c8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值