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之前 <强>画线条和文字强>
主要是计算各个点的坐标很烦
这里我画出一个图大家把代码和图对照理解一下
,
//画线与文字 私人空间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自定义的观点——扇形统计图的实现代码