Using GraphView from Java Class to set up in xml


  1. DIONYZUZ

    DIONYZUZ Member

    I searched through the objects in the xml and I was thinking it might be the surface view editor, but it is confusing. The java class uses a canvas to draw data on a graph. I want to have this working in a app I am using that will graph realtime data over time. Any advice or help will greatly be appreciated. Here's the code:

    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;

    /**
    * GraphView creates a scaled line or bar graph with x and y axis labels.
    *
    *
    */
    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, 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, 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 - 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 - 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 > largest)
    largest = values;
    return largest;
    }

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

    }

    Advertisement
  2. DIONYZUZ

    DIONYZUZ Member

    Nevermind, I found it out. I don't even need to use the xml to view it. Anyways it would still be nice to know

Share This Page