andriod饼图简单实现

接下来是饼图,依旧是简单实现,没办法菜鸟,以后改进吧。

效果图:


接下来是代码:

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 PieView extends View {
	
	private int[] data;				//数据
	private String[] info;			//文本信息	
	private float[] percent;		//比例
	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 PieView(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 ;
									
			float arcLeft = cirX - radius;
			float arcTop  = cirY - radius ;
			float arcRight = cirX + radius ;
			float arcBottom = cirY + radius ;
			RectF arcRF0 = new RectF(arcLeft, arcTop, arcRight, arcBottom);
			
			float CurrPer = 0;
			for(int i=0; i<percent.length; i++) {
				arrPaint.setColor(colors[i]);
				canvas.drawArc(arcRF0, CurrPer, percent[i], true, arrPaint);
				canvas.drawArc(arcRF0, CurrPer, percent[i], true, mainPaint);
				CurrPer += percent[i];
			}
	}		
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值