在Android中绘制饼图?

Tes*_*ter 10 android

我需要绘制饼图(动态值).如何在不使用第三方API的情况下创建图表.

Ram*_*ula 22

下面显示了简单的饼图,您必须扩展更多功能... values []和colors数组应该相等....

public class Demo extends Activity {
    /** Called when the activity is first created. */
    float values[]={300,400,100,500};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout linear=(LinearLayout) findViewById(R.id.linear);
        values=calculateData(values);
        linear.addView(new MyGraphview(this,values));

    }
    private float[] calculateData(float[] data) {
        // TODO Auto-generated method stub
        float total=0;
        for(int i=0;i<data.length;i++)
        {
            total+=data[i];
        }
        for(int i=0;i<data.length;i++)
        {
        data[i]=360*(data[i]/total);            
        }
        return data;

    }
    public class MyGraphview extends View
    {
        private Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
        private float[] value_degree;
        private int[] COLORS={Color.BLUE,Color.GREEN,Color.GRAY,Color.CYAN,Color.RED};
        RectF rectf = new RectF (10, 10, 200, 200);
        int temp=0;
        public MyGraphview(Context context, float[] values) {

            super(context);
            value_degree=new float[values.length];
            for(int i=0;i<values.length;i++)
            {
                value_degree[i]=values[i];
            }
        }
        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);

            for (int i = 0; i < value_degree.length; i++) {//values2.length; i++) {
                if (i == 0) {
                    paint.setColor(COLORS[i]);
                    canvas.drawArc(rectf, 0, value_degree[i], true, paint);
                } 
                else
                {
                        temp += (int) value_degree[i - 1];
                        paint.setColor(COLORS[i]);
                        canvas.drawArc(rectf, temp, value_degree[i], true, paint);
                }
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我用你的代码绘制图形.工作非常好但是我的小问题.我在一边得到了白色的坐标.所以请告诉我这是什么问题? (2认同)

Wal*_*rat 5

绘制饼图的基本函数,输入是颜色数组和值数组。它们的数组必须具有相同的大小。切片是根据每张幻灯片的值以及所有值的总和来计算的。当然,您也可以更改为浮点值。该解决方案作为轻量级辅助函数提供。它很容易使用,并且您不需要为其定义类。

public static void drawPieChart(Bitmap bmp, int[] colors, int[] slices){
    //canvas to draw on it
    Canvas canvas = new Canvas(bmp);
    RectF box = new RectF(2, 2,bmp.getWidth()-2 , bmp.getHeight()-2);

    //get value for 100%
    int sum = 0;
    for (int slice : slices) {
        sum += slice;
    }
    //initalize painter
    Paint paint = new Paint();
    paint.setAntiAlias(true);

    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(1f);
    paint.setStyle(Style.FILL_AND_STROKE);
    float start = 0;
    //draw slices
    for(int i =0; i < slices.length; i++){
        paint.setColor(colors[i]);
        float angle;
        angle = ((360.0f / sum) * slices[i]);
        canvas.drawArc(box, start, angle, true, paint);
        start += angle;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 将此解释移至您的答案中(上面有一个编辑按钮)。您可能想证明为什么您的答案比当前接受的答案更好。 (2认同)

小智 0

org.achartengine.chart.PieChart您可以使用扩展的aChartEngine roundChart
欲了解更多详情,您可以访问achartengine-0.7.0-javadocs/org/achartengine/chart/PieChart.html

当您从以下位置下载 javadoc 时,这将可用aChartEngine.org