If you think the Android project markj listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
package com.markjmind.mobile.api.android.ui.drawgraph;
/*www.java2s.com*/import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
publicclass PieGraph extends View{
float mDensity;
publicint mRadius = 30;
publicint mBackColor = 0;
Paint Pnt = new Paint();
ArrayList<PieGraphInfo> pieInfo = new ArrayList<PieGraphInfo>();
public PieGraph(Context context) {
super(context);
init();
}
public PieGraph(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
publicvoid init(){
mDensity = getContext().getResources().getDisplayMetrics().density;
clear();
}
publicvoid setRadius(int radius){
this.mRadius = (int)(radius*mDensity);
}
publicvoid setBackgroundColor(int color){
mBackColor = color;
}
publicvoid add(PieGraphInfo info){
pieInfo.add(info);
}
publicvoid add(int angle, int color){
pieInfo.add(new PieGraphInfo(angle,color));
invalidate();
}
publicvoid clear(){
pieInfo.clear();
}
@Override
protectedvoid onDraw(Canvas canvas) {
super.onDraw(canvas);
drawBackCircle(canvas);
drawCircle(canvas);
}
privatevoid drawCircle(Canvas canvas){
Pnt.setStrokeWidth(mRadius);
Pnt.setStyle(Paint.Style.STROKE);
Pnt.setDither(true);
int w = getWidth();
int h = getHeight();
int stW=0;
int stH=0;
if(w>h){
stW = (w-h)/2+mRadius/2;
stH = mRadius/2;
w=h;
}else{
stW = mRadius/2;
stH = (h-w)/2+mRadius/2;
h=w;
}
w = w+stW-mRadius;
h = h+stH-mRadius;
RectF rect=new RectF(stW,stH,w,h);
int pre_a = -90;
for(int i=0;i<pieInfo.size();i++){
Pnt.setColor(pieInfo.get(i).color);
canvas.drawArc(rect,pre_a,pieInfo.get(i).angle,false,Pnt);
pre_a = pre_a+pieInfo.get(i).angle;
}
}
privatevoid drawBackCircle(Canvas canvas){
Paint Pnt = new Paint();
Pnt.setColor(mBackColor);
Pnt.setStrokeWidth(mRadius);
Pnt.setStyle(Paint.Style.STROKE);
int w = getWidth();
int h = getHeight();
int stW=0;
int stH=0;
if(w>h){
stW = (w-h)/2+mRadius/2;
stH = mRadius/2;
w=h;
}else{
stW = mRadius/2;
stH = (h-w)/2+mRadius/2;
h=w;
}
w = w+stW-mRadius;
h = h+stH-mRadius;
RectF rect=new RectF(stW,stH,w,h);
canvas.drawArc(rect,0,360,false,Pnt);
}
publicclass PieGraphInfo{
publicint angle;
publicint color;
public PieGraphInfo(int angle, int color){
this.angle = angle;
this.color = color;
}
}
}