2011-03-14 8 views
6

मैं नया जावा हूं और एंड्रॉइड में नया हूं। मैं एक एंड्रॉइड ऐप लिखने की कोशिश कर रहा हूं जो उपयोगकर्ता के आधार पर डेटा को ग्राफ़ करता है। जावास्क्रिप्ट का उपयोग किये बिना जावा में ऐसा करने का कोई तरीका है (जिसे मैं नहीं जानता)?एंड्रॉइड में ग्राफ और चार्ट आकर्षित करने का कोई तरीका है?

+3

संभव डुप्लिकेट: [? Android के लिए किसी भी अच्छा रेखांकन संकुल] (http://stackoverflow.com/questions/424752/किसी भी अच्छे ग्राफिंग-पैकेज-एंड्रॉइड के लिए) –

+0

असल में, सबसे अच्छा स्वीकार्य उत्तर पुराना हो सकता है (अप्रैल 200 9) तो शायद एक नया और अद्यतित प्रश्न/उत्तर लायक होगा le। –

+1

कम सुझावों के साथ हाल ही में डुप्लिकेट: [एंड्रॉइड में चार्ट ड्राइंग के लिए एपीआई] (http://stackoverflow.com/questions/3891141/api-for-drawing-chart-in-android) –

उत्तर

7

कोड के नीचे की कोशिश

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); 
} 
} 

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; 
} 

}