48 votos

Cómo dibujar gráficos en Android?

Duplicar posibles:
Cualquier buen paquetes de gráficos para Android?

Quiero llamar gráficos como los gráficos circulares para mostrar las estadísticas de mi aplicación de Android. Como Android no soporta Swing y AWT, me pregunto cómo puedo dibujar gráficos en Android? Tenga en cuenta que yo no quiero utilizar una herramienta de terceros.

46voto

jjoe64 Puntos 3260

Post Original: la Tabla y el Gráfico de la Biblioteca para Android

Con la biblioteca GraphView es posible crear un gráfico de líneas.

GraphView es una pequeña biblioteca para Android para crear mediante programación flexible y de aspecto agradable de la línea de diagramas. Es fácil comprender, integrar y personalizar.

Primera checkout de la biblioteca y de integrar en su proyecto. El código fuente está alojado en github. GraphView biblioteca en github

También es posible dejar que el gráfico sea ampliable (zoom) y desplazable. Más información acerca de esta biblioteca en el post Original: la Tabla y el Gráfico de la Biblioteca para Android

Esto es cómo se vería como: line graph

A continuación, usted puede crear fácilmente con un par de líneas de código (ver fragmento):

// graph with dynamically genereated horizontal and vertical labels
GraphView graphView = new GraphView(
  this // context
  , new GraphViewData[] {
    new GraphViewData(1, 2.0d)
    , new GraphViewData(2, 1.5d)
    , new GraphViewData(2.5, 3.0d) // another frequency
    , new GraphViewData(3, 2.5d)
    , new GraphViewData(4, 1.0d)
    , new GraphViewData(5, 3.0d)
  } // data
  , "GraphViewDemo" // heading
  , null // dynamic labels
  , null // dynamic labels
);
LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
layout.addView(graphView);

9voto

Dan Puntos 27909

Usted puede intentar AChartEngine . Open-fuente y fácil de usar.

8voto

Esto es algo que he llegado con después de mirar en Demos API:

 package com.examples.piechart;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;

public class PieChart extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SampleView(this));
    }

    private static class SampleView extends View{

         private Paint[] mPaints;
         private Paint mFramePaint;
         private boolean[] mUseCenters;
         private RectF[] mOvals;
         private RectF mBigOval;
         private float mStart;
         private float mSweep;
         private int mBigIndex;

         private static final float SWEEP_INC = 2;
         private static final float START_INC = 30;

         public SampleView(Context context) {
             super(context);

             mPaints = new Paint[4];
             mUseCenters = new boolean[4];
             mOvals = new RectF[4];

             mPaints[0] = new Paint();
             mPaints[0].setAntiAlias(true);
             mPaints[0].setStyle(Paint.Style.FILL);
             mPaints[0].setColor(0x88FF0000);
             mUseCenters[0] = false;

             mPaints[1] = new Paint(mPaints[0]);
             mPaints[1].setColor(0x8800FF00);
             mUseCenters[1] = true;

             mPaints[2] = new Paint(mPaints[0]);
             mPaints[2].setStyle(Paint.Style.STROKE);
             mPaints[2].setStrokeWidth(4);
             mPaints[2].setColor(0x880000FF);
             mUseCenters[2] = false;

             mPaints[3] = new Paint(mPaints[2]);
             mPaints[3].setColor(0x88888888);
             mUseCenters[3] = true;

             mBigOval = new RectF(40, 10, 280, 250);

             //mOvals[0] = new RectF( 10, 270,  70, 330);
             mOvals[1] = new RectF( 90, 270, 150, 330);
             mOvals[2] = new RectF(170, 270, 230, 330);
             mOvals[3] = new RectF(250, 270, 310, 330);

             mFramePaint = new Paint();
             mFramePaint.setAntiAlias(true);
             mFramePaint.setStyle(Paint.Style.STROKE);
             mFramePaint.setStrokeWidth(0);
         }

         private void drawArcs(Canvas canvas, RectF oval, boolean useCenter,
                               Paint paint) {
             canvas.drawRect(oval, mFramePaint);
             canvas.drawArc(oval, mStart, mSweep, useCenter, paint);

         }

         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);

             drawArcs(canvas, mBigOval, mUseCenters[1],
                      mPaints[1]);
            /* 
             for (int i = 0; i < 2; i++) {
                 drawArcs(canvas, mOvals[i], mUseCenters[i], mPaints[i]);
                 drawArcs(canvas, mOvals[1], mUseCenters[1], mPaints[1]);
                 }
             */

             drawArcs(canvas, mOvals[1], mUseCenters[1], mPaints[1]);
             mSweep += SWEEP_INC;
             if (mSweep > 360) {
                 mSweep -= 360;
                 mStart += START_INC;
                 if (mStart >= 360) {
                     mStart -= 360;
                 }
                 mBigIndex = (mBigIndex + 1) % mOvals.length;
             }
             invalidate();
         }
     }
 };
 

¿Alguien puede mejorar aún más?

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X