Android RadarView雷达图(蜘蛛网图)的实现代码

  

<人物> 公司产品需要一个雷达图来展示各维度的比重,网上找了一波,学到不少,直接自己上手来撸一记

  

无图言虚空

  

 Android RadarView雷达图(蜘蛛网图)的实现代码

  

简单分析一波,确定雷达图正几边形的——正五边形int数=5,分为几个层数4层int layerCount=4

        @Override   保护空白>   私人int数=5;//几边形   私人int layerCount=4;//层数   私人浮动角;//每条边对应的圆心角   私人int centerX;//圆心x   私人int centerY;//圆心y   私人浮动半径;//半径   私人油漆polygonPaint;//边框油漆   私人油漆linePaint;//连线油漆   私人油漆txtPaint;//文字油漆   私人油漆circlePaint;//圆点漆   私人油漆regionColorPaint;//覆盖区域油漆   私人双[]9={0.91,0.35,0.12,0.8,0.5};//覆盖区域百分比   私人String[]标题={“队伍”、“斗地主”,“大吉大利,晚上吃鸡”,“炉石传说”、“跳一跳”},//文字            公共RadarView(上下文语境){   这(上下文,null, 0);   }      公共RadarView(上下文语境,@Nullable AttributeSet attrs) {   这(上下文、attrs 0);   }      公共RadarView(上下文语境,@Nullable AttributeSet attrs, int defStyleAttr) {   超级(上下文、attrs defStyleAttr);//计算圆心角   角=(浮动)(数学。π* 2/数);      polygonPaint=new油漆();   polygonPaint.setColor (ContextCompat。R.color.radarPolygonColor色鬼(上下文));   polygonPaint.setAntiAlias(真正的);   polygonPaint.setStyle (Paint.Style.STROKE);   polygonPaint.setStrokeWidth (4);      linePaint=new油漆();   linePaint.setColor (ContextCompat。R.color.radarLineColor色鬼(上下文));   linePaint.setAntiAlias(真正的);   linePaint.setStyle (Paint.Style.STROKE);   linePaint.setStrokeWidth (2);      txtPaint=new油漆();   txtPaint.setColor (ContextCompat。R.color.radarTxtColor色鬼(上下文));   txtPaint.setAntiAlias(真正的);   txtPaint.setStyle (Paint.Style.STROKE);   txtPaint.setTextSize (DensityUtil。dpToPx(上下文,12));      circlePaint=new油漆();   circlePaint.setColor (ContextCompat。R.color.radarCircleColor色鬼(上下文));   circlePaint.setAntiAlias(真正的);      regionColorPaint=new油漆();   regionColorPaint.setColor (ContextCompat。R.color.radarRegionColor色鬼(上下文));   regionColorPaint.setStyle (Paint.Style.FILL);   regionColorPaint.setAntiAlias(真正的);      }      

<强>确定中心点

  

需要正五边形得有一个圆,圆内接正五边形,在onSizeChanged方法里获取圆心,确定半径

        @Override   保护空白>   私人空间drawPolygon(帆布画布){   路径路径=new路径();   浮动半径r=/layerCount;   for (int i=1;我& lt;=layerCount;我+ +){   浮动咕咕叫=r *我;//当前所在层的半径   for (int j=0;j & lt;计数;j + +) {   如果(j==0) {//每一层第一个点坐标   路径。函数(centerX centerY -咕咕叫);   其他}{//顺时针记录其余顶角的点坐标   浮动x=(浮动)(centerX +数学。罪(角* j) *咕咕叫);   浮动y=(浮动)(centerY——数学。因为(角* j) *咕咕叫);   路径。画线(x, y);   }   }//最外层的顶角外面的五个小圆点(图中红色部分)   如果(i==layerCount) {   for (int j=0;j & lt;计数;j + +) {   浮动x=(浮动)(centerX +数学。罪(角* j) *(咕咕叫+ 12));   浮动y=(浮动)(centerY——数学。因为(角* j) *(咕咕叫+ 12));   画布。drawCircle (x, y, 4, circlePaint);   }   }   path.close ();   画布。drawPath(路径,polygonPaint);   }   }      

 Android RadarView雷达图(蜘蛛网图)的实现代码”>,</p>
  <p> <强>绘制连线</强> </p>
  <p>绘制最内层顶角到最外层顶角的连线</p>
  
  <pre类=   私人空白画直线(帆布画布){   浮动半径r=/layerCount;   for (int i=0;我& lt;计数;我+ +){//起始坐标从中心开始的话startx=centerX startY=浮动startX=(浮动)(centerX +数学。罪(角* i) * r);   浮动startY=(浮动)(centerY -数学。因为(角* i) * r);//末端坐标   浮动endX=(浮动)(centerX +数学。罪(角* i) *半径);   恩迪?(浮动)(centerY -数学。因为(我)角* *半径);   画布。画直线(startX startY endX,恩迪,linePaint);   }   }

Android RadarView雷达图(蜘蛛网图)的实现代码