canvas教程

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

字号+ 作者:H5之家 来源:H5之家 2017-04-04 17:01 我要评论( )

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

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

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

    上图:

        

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

     代码很简单,附上:

      

package com.xcl.chart; /** * Canvas练习 * 自已绘分割突出效果的饼图(Pie Chart) * * author:xiongchuanliang * date:2014-4-12 */ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.DisplayMetrics; import android.view.View; public class PanelPieChart2 extends View{ private int ScrWidth,ScrHeight; //演示用的百分比例,实际使用中,即为外部传入的比例参数 private final float arrPer[] = new float[]{20f,30f,10f,40f}; //RGB颜色数组 private final int arrColorRgb[][] = { {77, 83, 97}, {148, 159, 181}, {253, 180, 90}, {52, 194, 188}} ; //指定突出哪个块 private final int offsetBlock = 2; public PanelPieChart2(Context context) { super(context); // TODO Auto-generated constructor stub //屏幕信息 DisplayMetrics dm = getResources().getDisplayMetrics(); ScrHeight = dm.heightPixels; ScrWidth = dm.widthPixels; } public void onDraw(Canvas canvas){ //画布背景 canvas.drawColor(Color.WHITE); float cirX = ScrWidth / 2; float cirY = ScrHeight / 3 ; float radius = ScrHeight / 5 ;//150; float arcLeft = cirX - radius; float arcTop = cirY - radius ; float arcRight = cirX + radius ; float arcBottom = cirY + radius ; RectF arcRF0 = new RectF(arcLeft ,arcTop,arcRight,arcBottom); //画笔初始化 Paint PaintArc = new Paint(); Paint PaintLabel = new Paint(); PaintLabel.setColor(Color.WHITE); PaintLabel.setTextSize(16); //位置计算类 XChartCalc xcalc = new XChartCalc(); float Percentage = 0.0f; float CurrPer = 0.0f; int i= 0; for(i=0; i<arrPer.length; i++) { //将百分比转换为饼图显示角度 Percentage = 360 * (arrPer[i]/ 100); Percentage = (float)(Math.round(Percentage *100))/100; //分配颜色 PaintArc.setARGB(255,arrColorRgb[i][0], arrColorRgb[i][1], arrColorRgb[i][2]); if( i == offsetBlock) //指定突出哪个块 { //偏移圆心点位置 float newRadius = radius /10; //计算百分比标签 xcalc.CalcArcEndPointXY(cirX, cirY, newRadius , CurrPer + Percentage/2); arcLeft = xcalc.getPosX() - radius; arcTop = xcalc.getPosY() - radius ; arcRight = xcalc.getPosX() + radius ; arcBottom = xcalc.getPosY() + radius ; RectF arcRF1 = new RectF(arcLeft ,arcTop,arcRight,arcBottom); //在饼图中显示所占比例 canvas.drawArc(arcRF1, CurrPer, Percentage, true, PaintArc); //计算百分比标签 xcalc.CalcArcEndPointXY(xcalc.getPosX(), xcalc.getPosY(), radius - radius/2/2, CurrPer + Percentage/2); //标识 canvas.drawText(Float.toString(arrPer[i])+"%",xcalc.getPosX(), xcalc.getPosY() ,PaintLabel); }else{ //在饼图中显示所占比例 canvas.drawArc(arcRF0, CurrPer, Percentage, true, PaintArc); //计算百分比标签 xcalc.CalcArcEndPointXY(cirX, cirY, radius - radius/2/2, CurrPer + Percentage/2); //标识 canvas.drawText(Float.toString(arrPer[i])+"%",xcalc.getPosX(), xcalc.getPosY() ,PaintLabel); } //下次的起始角度 CurrPer += Percentage; } } }    代码中只需注意下,指定要突出哪块,就在哪块上指定下偏移即可。

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

   

     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:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Excanvas.js让IE浏览器支持HTML5 Canvas画布

    Excanvas.js让IE浏览器支持HTML5 Canvas画布

    2017-04-04 17:02

  • canvas取消表盘时钟

    canvas取消表盘时钟

    2017-04-04 12:00

  • html5 canvas 图片像素

    html5 canvas 图片像素

    2017-04-04 11:05

  • canvas实现钟表效果

    canvas实现钟表效果

    2017-04-04 11:04

网友点评