http://blog.csdn.net/xcl168/article/details/23591181

http://blog.csdn.net/xcl168/article/details/23591181

http://blog.csdn.net/xcl168/article/details/23591181

http://blog.csdn.net/xcl168/article/details/23591181






Android Canvas练习(9)自已绘分割突出效果的饼图(Pie Chart)

分类:Android 746人阅读 评论(2) 收藏 举报 Android Canvas android画饼图 pie chart

这里画了个饼图的变种,具有分割突出效果的饼图(Pie Chart),就是个切蛋糕效果的饼图,画这种图,其技巧就在于圆心的偏移。

在圆心偏移,半径不变的基础上,效果就出来了。

上图:

怎么样,效果还是有模有样的吧。

代码很简单,附上:

[java] view plain copy
  1. packagecom.xcl.chart;
  2. /**
  3. *Canvas练习
  4. *自已绘分割突出效果的饼图(PieChart)
  5. *
  6. *author:xiongchuanliang
  7. *date:2014-4-12
  8. */
  9. importandroid.content.Context;
  10. importandroid.graphics.Canvas;
  11. importandroid.graphics.Color;
  12. importandroid.graphics.Paint;
  13. importandroid.graphics.RectF;
  14. importandroid.util.DisplayMetrics;
  15. importandroid.view.View;
  16. publicclassPanelPieChart2extendsView{
  17. privateintScrWidth,ScrHeight;
  18. //演示用的百分比例,实际使用中,即为外部传入的比例参数
  19. privatefinalfloatarrPer[]=newfloat[]{20f,30f,10f,40f};
  20. //RGB颜色数组
  21. privatefinalintarrColorRgb[][]={{77,83,97},
  22. {148,159,181},
  23. {253,180,90},
  24. {52,194,188}};
  25. //指定突出哪个块
  26. privatefinalintoffsetBlock=2;
  27. publicPanelPieChart2(Contextcontext){
  28. super(context);
  29. //TODOAuto-generatedconstructorstub
  30. //屏幕信息
  31. DisplayMetricsdm=getResources().getDisplayMetrics();
  32. ScrHeight=dm.heightPixels;
  33. ScrWidth=dm.widthPixels;
  34. }
  35. publicvoidonDraw(Canvascanvas){
  36. //画布背景
  37. canvas.drawColor(Color.WHITE);
  38. floatcirX=ScrWidth/2;
  39. floatcirY=ScrHeight/3;
  40. floatradius=ScrHeight/5;//150;
  41. floatarcLeft=cirX-radius;
  42. floatarcTop=cirY-radius;
  43. floatarcRight=cirX+radius;
  44. floatarcBottom=cirY+radius;
  45. RectFarcRF0=newRectF(arcLeft,arcTop,arcRight,arcBottom);
  46. //画笔初始化
  47. PaintPaintArc=newPaint();
  48. PaintPaintLabel=newPaint();
  49. PaintLabel.setColor(Color.WHITE);
  50. PaintLabel.setTextSize(16);
  51. //位置计算类
  52. XChartCalcxcalc=newXChartCalc();
  53. floatPercentage=0.0f;
  54. floatCurrPer=0.0f;
  55. inti=0;
  56. for(i=0;i<arrPer.length;i++)
  57. {
  58. //将百分比转换为饼图显示角度
  59. Percentage=360*(arrPer[i]/100);
  60. Percentage=(float)(Math.round(Percentage*100))/100;
  61. //分配颜色
  62. PaintArc.setARGB(255,arrColorRgb[i][0],arrColorRgb[i][1],arrColorRgb[i][2]);
  63. if(i==offsetBlock)//指定突出哪个块
  64. {
  65. //偏移圆心点位置
  66. floatnewRadius=radius/10;
  67. //计算百分比标签
  68. xcalc.CalcArcEndPointXY(cirX,cirY,newRadius,CurrPer+Percentage/2);
  69. arcLeft=xcalc.getPosX()-radius;
  70. arcTop=xcalc.getPosY()-radius;
  71. arcRight=xcalc.getPosX()+radius;
  72. arcBottom=xcalc.getPosY()+radius;
  73. RectFarcRF1=newRectF(arcLeft,arcTop,arcRight,arcBottom);
  74. //在饼图中显示所占比例
  75. canvas.drawArc(arcRF1,CurrPer,Percentage,true,PaintArc);
  76. //计算百分比标签
  77. xcalc.CalcArcEndPointXY(xcalc.getPosX(),xcalc.getPosY(),radius-radius/2/2,CurrPer+Percentage/2);
  78. //标识
  79. canvas.drawText(Float.toString(arrPer[i])+"%",xcalc.getPosX(),xcalc.getPosY(),PaintLabel);
  80. }else{
  81. //在饼图中显示所占比例
  82. canvas.drawArc(arcRF0,CurrPer,Percentage,true,PaintArc);
  83. //计算百分比标签
  84. xcalc.CalcArcEndPointXY(cirX,cirY,radius-radius/2/2,CurrPer+Percentage/2);
  85. //标识
  86. canvas.drawText(Float.toString(arrPer[i])+"%",xcalc.getPosX(),xcalc.getPosY(),PaintLabel);
  87. }
  88. //下次的起始角度
  89. CurrPer+=Percentage;
  90. }
  91. }
  92. }
代码中只需注意下,指定要突出哪块,就在哪块上指定下偏移即可。


附上我其它绘制的图链接:

Android Canvas练习(1)画一张报表来玩

Android Canvas练习(2)自已绘饼图

Android Canvas练习(3)自已绘柱形图

Android Canvas练习(4)自已绘折线图

Android Canvas练习(5)自已绘面积图(Area Chart)

Android Canvas练习(7)绘制欧冠八强防守&控制率数据对比图

Android Canvas练习(8)自已绘环形图(Dount Chart)


MAIL: xcl_168@aliyun.com

BLOG: http://blog.csdn.net/xcl168


更多相关文章

  1. 如何实现像ios那样的富有弹性的ListView (上下滑动有弹性,且能恢复
  2. setTheme问题2
  3. android 源码大全
  4. Android(安卓)Intent Flag组合使用
  5. 带图片的按钮-Android源代码
  6. android - 自定义Activity跳转效果
  7. android自制拨号器
  8. Android(安卓)TabHost的使用
  9. Android实现顶部悬浮效果

随机推荐

  1. Android滚轮实现LinearSnapHelper
  2. Android中的几种网络请求方式详解
  3. Android(安卓)多个APK共享数据
  4. Mac下搭建android编译环境,编译cocos2d-x
  5. NDK编程实例
  6. Android离线安装方法
  7. Android中的手势识别
  8. android gen文件不生成、R文件报错
  9. Android(安卓)动画
  10. Android开发教程大全介绍