2011-03-14 25 views
6

Soy nuevo en Java y nuevo en Android. Intento escribir una aplicación para Android que grafica los datos de un usuario según la fecha. ¿Hay alguna manera de hacer esto en Java sin usar JavaScript (que no sé)?¿Hay alguna manera de dibujar gráficos y tablas en Android?

+3

Duplicar posibles: [? Cualquier buenos paquetes de gráficos para Android] (http://stackoverflow.com/questions/424752/any-good-graphing-packages-for-android) –

+0

En realidad, la mejor respuesta aceptada puede estar desactualizada (abril de 2009), por lo que quizás valga la pena una pregunta/respuestas más recientes y actualizadas. le. –

+1

Duplicado más reciente con menos sugerencias: [Api para dibujar un gráfico en android] (http://stackoverflow.com/questions/3891141/api-for-drawing-chart-in-android) –

Respuesta

7

Try continuación Código

clase GraphActivity

package com.graph; 
import android.app.Activity; 
import android.os.Bundle; 

public class GraphActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    float[] values = new float[] { 2.0f,1.5f, 2.5f, 1.0f , 3.0f }; 
    String[] verlabels = new String[] { "great", "ok", "bad" }; 
    String[] horlabels = new String[] { "today", "tomorrow", "next week", "next month" }; 
    GraphView graphView = new GraphView(this, values, "GraphViewDemo",horlabels, verlabels, GraphView.LINE); 
    setContentView(graphView); 
} 
} 

clase GraphView

package com.graph; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Paint.Align; 
import android.view.View; 


public class GraphView extends View { 

public static boolean BAR = true; 
public static boolean LINE = false; 

private Paint paint; 
private float[] values; 
private String[] horlabels; 
private String[] verlabels; 
private String title; 
private boolean type; 

public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) { 
    super(context); 
    if (values == null) 
     values = new float[0]; 
    else 
     this.values = values; 
    if (title == null) 
     title = ""; 
    else 
     this.title = title; 
    if (horlabels == null) 
     this.horlabels = new String[0]; 
    else 
     this.horlabels = horlabels; 
    if (verlabels == null) 
     this.verlabels = new String[0]; 
    else 
     this.verlabels = verlabels; 
    this.type = type; 
    paint = new Paint(); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    float border = 20; 
    float horstart = border * 2; 
    float height = getHeight(); 
    float width = getWidth() - 1; 
    float max = getMax(); 
    float min = getMin(); 
    float diff = max - min; 
    float graphheight = height - (2 * border); 
    float graphwidth = width - (2 * border); 

    paint.setTextAlign(Align.LEFT); 
    int vers = verlabels.length - 1; 
    for (int i = 0; i < verlabels.length; i++) { 
     paint.setColor(Color.DKGRAY); 
     float y = ((graphheight/vers) * i) + border; 
     canvas.drawLine(horstart, y, width, y, paint); 
     paint.setColor(Color.WHITE); 
     canvas.drawText(verlabels[i], 0, y, paint); 
    } 
    int hors = horlabels.length - 1; 
    for (int i = 0; i < horlabels.length; i++) { 
     paint.setColor(Color.DKGRAY); 
     float x = ((graphwidth/hors) * i) + horstart; 
     canvas.drawLine(x, height - border, x, border, paint); 
     paint.setTextAlign(Align.CENTER); 
     if (i==horlabels.length-1) 
      paint.setTextAlign(Align.RIGHT); 
     if (i==0) 
      paint.setTextAlign(Align.LEFT); 
     paint.setColor(Color.WHITE); 
     canvas.drawText(horlabels[i], x, height - 4, paint); 
    } 

    paint.setTextAlign(Align.CENTER); 
    canvas.drawText(title, (graphwidth/2) + horstart, border - 4, paint); 

    if (max != min) { 
     paint.setColor(Color.LTGRAY); 
     if (type == BAR) { 
      float datalength = values.length; 
      float colwidth = (width - (2 * border))/datalength; 
      for (int i = 0; i < values.length; i++) { 
       float val = values[i] - min; 
       float rat = val/diff; 
       float h = graphheight * rat; 
       canvas.drawRect((i * colwidth) + horstart, (border - h) + graphheight, ((i * colwidth) + horstart) + (colwidth - 1), height - (border - 1), paint); 
      } 
     } else { 
      float datalength = values.length; 
      float colwidth = (width - (2 * border))/datalength; 
      float halfcol = colwidth/2; 
      float lasth = 0; 
      for (int i = 0; i < values.length; i++) { 
       float val = values[i] - min; 
       float rat = val/diff; 
       float h = graphheight * rat; 
       if (i > 0) 
        canvas.drawLine(((i - 1) * colwidth) + (horstart + 1) + halfcol, (border - lasth) + graphheight, (i * colwidth) + (horstart + 1) + halfcol, (border - h) + graphheight, paint); 
       lasth = h; 
      } 
     } 
    } 
} 

private float getMax() { 
    float largest = Integer.MIN_VALUE; 
    for (int i = 0; i < values.length; i++) 
     if (values[i] > largest) 
      largest = values[i]; 
    return largest; 
} 

private float getMin() { 
    float smallest = Integer.MAX_VALUE; 
    for (int i = 0; i < values.length; i++) 
     if (values[i] < smallest) 
      smallest = values[i]; 
    return smallest; 
} 

} 
Cuestiones relacionadas