Android自定义的观点——扇形统计图的实现代码

  

Android扇形统计图

  

先看看效果:

  

看上去如果觉得还行就继续往下看吧!

  

 Android自定义的观点——扇形统计图的实现代码

  

 Android自定义的观点——扇形统计图的实现代码

  

<>强自定义观点

  

<强>定义成员变量

        私人int mHeight mWidth;//宽高   私人油漆mPaint;//扇形的画笔   私人油漆mTextPaint;//画文字的画笔      私人int centerX centerY;//中心坐标//捌洹彼募壑?/扇形图分成太多快所以要合并一部分为其他即图中灰色部分   私人双休息;      私人int maxNum=5;//扇形图的最大块数超过的项目就合并到其他      字符串别人="其他”;//捌洹彼橐允镜奈淖?   双总;//数据的总和   双[]数据;//数据集   String[]文本;//每个数据对应的文字集//颜色默认的颜色   私人int [] mColors={   Color.parseColor (“# FF4081”), Color.parseColor (“# ffc0cb”),   Color.parseColor (“# 00 ff00”), Color.parseColor (# 0066 ff) Color.parseColor (“# ffee00”)   };      私人int mTextSize;//文字大小单位:像素      私人int半径=1000;//半径在画图时初始化      之前      

<强>测量宽高

        @Override   保护空白>   @Override   保护空白>//画扇形   私人空间drawCircle(帆布画布){   int centerX=(getRight ()——getLeft())/2;//中点   int centerY=(getBottom ()——getTop ())/2;   RectF矩形=new RectF((浮动)(centerX -半径),centerY-radius,   centerX +半径,半径centerY +);//圆形区域      int开始=0;//扇形开始的角度   for (int i=0;我& lt;(maxNum之前      

<强>画线条和文字

  

主要是计算各个点的坐标很烦
  

  

这里我画出一个图大家把代码和图对照理解一下

  

 Android自定义的观点——扇形统计图的实现代码

  

,

     //画线与文字   私人空间drawLineAndText(帆布画布){   int开始=0;//平移画布到中心所以下面的坐标是从中点开始算起的   画布。翻译(centerX centerY);   mPaint.setStrokeWidth(4);//线条宽度//如果数据集过大那么要合并到其他   for (int i=0;我& lt;(maxNum & lt;数据。长度& # 63;maxNum: datas.length);我+ +){   浮动角=(浮动)((数据[我]* 1.0 f/总)* 360);//画线条和文字   画直线(画布,开始、角度、文献[我],mColors[我% mColors.length]);   开始+=角;   }//画其他部分的线条和文字   如果开始& lt;360)//如小果开始于360年说明有其他部分   画直线(画布,开始,360年开始,其他人,Color.GRAY);      }      私人空白画直线(帆布画布,int开始,浮动角度,文本字符串,int颜色){   mPaint.setColor(颜色);   浮动stopX stopY;   stopX=(浮动)((半径+ 40)*数学。因为((2 *开始+角)/2 *数学。π/180));   stopY=(浮动)((半径+ 40)*数学。罪((2 *开始+角)/2 *数学。π/180));      canvas.drawLine((浮动)((半径- 20)*数学。因为((2 *开始+角)/2 *数学。π/180)),   (浮动)((半径- 20)*数学。罪((2 *开始+角)/2 *数学。π/180)),   stopX、stopY mPaint   );//画横线   int dx;//判断横线是画在左边还是右边   int endX;   如果(stopX比;0){   endX=(centerX - getPaddingRight () - 20);   其他}{   endX=(-centerX + getPaddingLeft () + 20);   }//画横线   画布。画直线(stopX stopY,   endX、stopY mPaint   );   dx=(int) (endX - stopX);//测量文字大小   矩形矩形=new矩形();   mTextPaint。getTextBounds(文本,0,text.length(),矩形);   int w=rect.width ();   int h=rect.height ();   int抵消=20;//文字在横线的偏移量//画文字文字的Y坐标值的是文字底部的Y坐标   画布。drawText(文本,0,text.length (), dx祝辞0 & # 63;stopX +抵消:stopX - w抵消stopY + h, mTextPaint);//测量百分比大小   字符串比例=角/3.60 +“”;   比例=百分比。substring (0, percentage.length()在4 & # 63;4:percentage.length ()) +“%”;   mTextPaint。getTextBounds(百分比,0,percentage.length(),矩形);   w=rect.width () - 10;//画百分比   画布。drawText(百分比,0,percentage.length (), dx祝辞0 & # 63;stopX +抵消:stopX - w抵消stopY - 5, mTextPaint);      }      

Android自定义的观点——扇形统计图的实现代码