用Kotlin自定义雷达图 - DimensionRadarView

本文介绍了如何使用Kotlin在Android中创建自定义雷达图视图——DimensionRadarView。从确定雷达图的基本元素,如文字标签、线条和评分区域,到设置styleable属性,再到详细绘制雷达图的步骤,包括计算中心点、绘制线条和评分区域。文章还提供了布局配置和代码修改的示例,以及GitHub源码链接。
摘要由CSDN通过智能技术生成

第一步,确定雷达图中必要元素

一般的雷达图样式

如图,可以看出图中的雷达图包含了文字标签说明组成雷达图的线条评分覆盖区域的颜色
1.文字标签确定了雷达图有几个顶点
2.线条明确告诉我们可以用Path画出雷达图
3.评分覆盖区域则表明我们需要一个评分数组和对应的颜色
sample

styleable属性设置

<declare-styleable name="DimensionRadarView">
        <attr name="scoreLevel" format="integer" /><!--评分级别-->
        <attr name="maxScore" format="integer" /><!--最高评分-->
        <attr name="dimensionRotateDegree" format="float" /><!--雷达图旋转的角度-->
        <attr name="dimensionTextSize" format="dimension" /><!--标签的字体大小-->
        <attr name="diagonalLineColor" format="color" /><!--对角线的颜色-->
        <attr name="diagonalLineWidth" format="dimension" /><!--对角线的宽度-->
        <attr name="sideLineColor" format="color" /><!--边线的颜色-->
        <attr name="sideLineWidth" format="dimension" /><!--边线的宽度-->
        <attr name="maxSupportScoreNumber" format="integer" /><!--最大支持的评分个数-->
        <attr name="dimensionRadarBackgroundColor" format="color" /><!--雷达图的背景-->
        <attr name="scoreLevelDrawStyle"><!--评分区域的覆盖模式-->
            <enum name="full" value="0" />
            <enum name="stroke" value="1" />
        </attr>
        <attr name="dimensionTextArray" format="reference" /><!--评分标签数组,确定维度-->
        <attr name="dimensionTextColorArray" format="reference" /><!--评分标签文字的颜色-->
        <attr name="dimensionRadarScoreColorArray" format="reference" /><!--评分区域颜色数组-->
        <attr name="dimensionScoreLevelArray" format="reference" /><!--评分数组-->

    </declare-styleable>
    

第二步,画出雷达图

获取styleable中的属性

 context.obtainStyledAttributes(attrs, R.styleable.DimensionRadarView)?.run {
   

            getTextArray(R.styleable.DimensionRadarView_dimensionTextArray)?.forEach {
   
                dimensionTextList.add(it.toString())
            }

            getTextArray(R.styleable.DimensionRadarView_dimensionRadarScoreColorArray)?.forEachIndexed {
    index, it ->
                scoreColorArray.add(
                        try {
   
                            Color.parseColor(it?.toString())
                        } catch (e: java.lang.IllegalArgumentException) {
   
                            DEFAULT_SCORE_COLOR
                        })
            }

            dimensionTextColorArray = IntArray(divideCount) {
    DEFAULT_TEXT_COLOR }
            getTextArray(R.styleable.DimensionRadarView_dimensionTextColorArray)?.forEachIndexed {
    index, it ->
                if (index < divideCount) {
   
                    dimensionTextColorArray[index] =
                            try {
   
                                Color.parseColor(it.toString())
                            } catch (e: IllegalArgumentException) {
   
                                DEFAULT_TEXT_COLOR
                            }
                }
            }

            maxSupportScore
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值