andriod饼图(3d)简单实现

来源:互联网 发布:mac软件删除不了 编辑:程序博客网 时间:2024/05/16 17:17

饼图由于实现简单,所以试了下3d饼图,其实没什么区别,依然简单实现。

效果图:


代码奉上:

package mychart;import android.content.Context;import android.graphics.BlurMaskFilter;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.graphics.Path.Direction;import android.graphics.RectF;import android.graphics.Typeface;import android.view.View;public class Pie3DView extends View {private int[] data;//数据private String[] info;//信息private float[] percent;//比例private float depth; //深度   private int[] colors = //颜色new int[]{Color.RED, Color.YELLOW, Color.BLUE, Color.GREEN, Color.CYAN};private Paint mainPaint;//轮廓画笔private int ScrHeight;//屏幕高度private int ScrWidth;//屏幕宽度private Paint arrPaint;//填充画笔private Paint textPaint = null;//文本画笔//构造函数public Pie3DView(Context context,int[] data, String[] info) {super(context);this.data = data;this.info = info;initData();initPaint();}//初始化画笔private void initPaint(){mainPaint = new Paint();mainPaint.setAntiAlias(true);mainPaint.setColor(Color.WHITE);mainPaint.setStyle(Style.STROKE);mainPaint.setStrokeWidth(3);arrPaint = new Paint();arrPaint.setStyle(Style.FILL);BlurMaskFilter PaintBGBlur = new BlurMaskFilter(2, BlurMaskFilter.Blur.SOLID);arrPaint.setMaskFilter(PaintBGBlur);textPaint = new Paint();textPaint.setColor(Color.BLUE);textPaint.setTextSize(16);textPaint.setTypeface(Typeface.DEFAULT_BOLD);}//数据转化比例private void initData(){int sum=0;for (int i = 0 ;i < data.length; i++){sum += data[i];}percent = new float[data.length];for (int i = 0 ;i < data.length; i++){percent[i] = (float)data[i] /sum * 360;}}//绘图protected void onDraw(Canvas canvas) {super.onDraw(canvas);ScrHeight = getHeight();ScrWidth = getWidth();float cirX = ScrWidth / 2;float cirY = ScrHeight / 3;float radius = ScrHeight / 4;depth = radius / 5;final float p = 0.5f; float arcLeft = cirX - radius ;float arcTop  = cirY - radius * p;float arcRight = cirX + radius ;float arcBottom = cirY + radius * p;RectF arcRF0; for(int j= (int)depth; j>=0; j--){arcRF0 = new RectF(arcLeft, arcTop+j, arcRight, arcBottom+j);float CurrPer = -20;for(int i=0; i<percent.length; i++) {arrPaint.setColor(colors[i]);canvas.drawArc(arcRF0, CurrPer, percent[i], true, arrPaint);if(j==1 && CurrPer>0 && CurrPer<180)canvas.drawLine(cirX + (float)Math.cos(CurrPer / 180 * Math.PI) * radius,cirY + (float)Math.sin(CurrPer / 180 * Math.PI) * radius *p,cirX + (float)Math.cos(CurrPer / 180 * Math.PI) * radius,cirY + (float)Math.sin(CurrPer / 180 * Math.PI) * radius *p + 1f + depth,mainPaint);if(j==0 || j==depth)canvas.drawArc(arcRF0, CurrPer, percent[i], true, mainPaint);CurrPer += percent[i];}}}}
0 0
原创粉丝点击