简单绘制饼状图
来源:互联网 发布:java编程思想第五版 编辑:程序博客网 时间:2024/06/10 20:12
简单绘制饼状图
线上图吧
绘制简单的view主要就是onDraw方法
几个思路简单分析:
1.我们可以绘制几个扇形,然后把扇形拼到一起就是一个圆形的饼图了。
2.我们也可以绘制一个圆形,然后在圆形绘制半径出来。
如上方案很多,简单的view是如此,复杂的view可以拆分成简单的来处理,这样就不会摸不到头脑了。
下面介绍方案1的方法:
1.首先绘制饼图我们需要先确定基础的东西,如:圆心、半径等
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mTotalWidth = w - getPaddingLeft() - getPaddingRight(); mTotalHeight = h - getPaddingTop() - getPaddingBottom(); mRadius = (float) (Math.min(mTotalWidth, mTotalHeight) / 2 * 0.6); //调整,mRadius半径啊 rectF.left = -mRadius; rectF.top = -mRadius; rectF.right = mRadius; rectF.bottom = mRadius; }
2.既然绘制饼图,目的是数据分布情况,这里就开始进行分份了
//这里是把你传进来数据,进行汇总,后面会看每份数据占比,然后在对应到饼图上 for (int i = 0; i < mDataList.size(); i++) { totalNumber += mDataList.get(i).getRatio(); }if (totalNumber!=0) { //移动画布 canvas.translate(mTotalWidth/2,mTotalHeight/2); //绘制开始的方法 mydrawArc(canvas, rectF); }
3.正式开始绘制的流程,其实很简单的
private void mydrawArc(Canvas canvas, RectF rectF) { //开始绘制的角度,其实从什么角度都可以 startAngle = 0; //这是我自己在外围绘制了一个圈 canvas.drawCircle(0,0, mRadius+5, paintCircle); //下面循环绘制每个扇形区域了 for (int i = 0; i < mDataList.size(); i++) { //获取传入数据的值,并计算占多少弧度 float ratio = mDataList.get(i).getRatio(); float sweepAngle = (ratio / totalNumber) * 360;//绘制扇形了 paint.setColor(Color.parseColor(mDataList.get(i).getColor())); canvas.drawArc(rectF, startAngle, sweepAngle, true, paint); //计算扇形中间的坐标值,用于绘制引出线来显示占比多少 float pxs = (float) (mRadius * Math.cos(Math.toRadians(startAngle + sweepAngle / 2))); float pys = (float) (mRadius * Math.sin(Math.toRadians(startAngle + sweepAngle / 2))); float pxt = (float) ((mRadius + 20) * Math.cos(Math.toRadians(startAngle + sweepAngle / 2))); float pyt = (float) ((mRadius + 20) * Math.sin(Math.toRadians(startAngle + sweepAngle / 2))); //这里绘制的是引出线 canvas.drawLine(pxs, pys, pxt, pyt, paintLine); //用于比较引出线的朝向 endAngle=startAngle+sweepAngle/2; //显示占比多少的数字 String format = String.format("%.2f", (ratio / totalNumber)*100); float v = paintText.measureText(format + "%"); //这里绘制的是引出线,绘制上数字 if (endAngle>90&&endAngle<270) { canvas.drawLine(pxt, pyt, pxt-20, pyt, paintLine); canvas.drawText(format + "%", pxt-20-v, pyt, paintText); }else { canvas.drawLine(pxt, pyt, pxt+20, pyt, paintLine); canvas.drawText(format + "%", pxt+20, pyt, paintText); } //更新其实的角度 startAngle += sweepAngle; } }
如上基本完成了整个的绘制流程
结语
自己定义view其实并没有多难,只要你开始做,你就一定可以。
源码在此
http://download.csdn.net/download/shayubuhuifei/9938406
阅读全文
0 0
- 简单绘制饼状图
- 一个简单的饼状图的绘制!
- opengl 绘制简单图形
- 图形简单绘制擦除
- Android 简单图形绘制
- Winform 简单绘制公章
- OpenGL绘制简单图形
- 简单函数绘制
- cocos2d-x 简单绘制
- matplotlib绘制简单图
- 简单的直方图绘制
- Android绘制简单图形
- 简单绘制图形
- 绘制简单的矩形
- Qt简单坐标绘制
- OpenGL简单图形绘制
- ios 简单绘制
- VC++ 绘制简单电子元件
- Can't create handler inside thread that has not called Looper.prepare()解决方法
- jsp和js文件中获取EL表达式的值
- ECSHOP如何解决Deprecated: preg_replace()报错
- GRU神经网络
- 图解HTTPS
- 简单绘制饼状图
- MySQL数据类型
- shell之test 命令
- Java面试
- MFC中遇到的一些问题
- 微信支付申请不了找黑河马解决
- Oracle 创建普通用户,并赋予权限
- CentOS下编译OpenWrt过程详细笔记
- 目标检测“Perceptual Generative Adversarial Networks for Small Object Detection”