6
我是新的Java,也是Android的新手。我正在嘗試編寫一個Android應用程序,該應用程序根據日期來繪製來自用戶的數據。有沒有一種方法可以在不使用JavaScript的情況下在Java中執行此操作(我不知道)?有沒有一種方法可以在Android中繪製圖形和圖表?
我是新的Java,也是Android的新手。我正在嘗試編寫一個Android應用程序,該應用程序根據日期來繪製來自用戶的數據。有沒有一種方法可以在不使用JavaScript的情況下在Java中執行此操作(我不知道)?有沒有一種方法可以在Android中繪製圖形和圖表?
試試下面的代碼
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;
}
}
可能重複:[?任何好的圖形包爲Android(http://stackoverflow.com/questions/424752/any-good-graphing-packages-for-android) – 2011-03-14 17:51:45
其實,最好的接受答案可能會過時(2009年4月),所以也許一個更新的和最新的問題/答案將值得whi樂。 – 2011-03-14 17:53:01
更多最近的重複與較少的建議:[Api在android中繪製圖表](http://stackoverflow.com/questions/3891141/api-for-drawing-chart-in-android) – 2011-03-14 17:57:30