Double Possible:
Tout bon graphique des paquets pour Android?Je veux dessiner des graphiques comme les diagrammes à secteurs pour afficher les statistiques dans mon application Android. Que Android ne prend pas en charge Swing et AWT, je me demande comment puis-je dessiner des graphiques dans Android? Veuillez noter que je ne veux pas utiliser un outil tiers.
Réponses
Trop de publicités?Original post: Tableau et Graphique de la Bibliothèque pour Android
Avec la bibliothèque GraphView il est possible de créer une ligne graphique.
GraphView est une petite bibliothèque pour Android pour créer par programmation souple et de belle apparence de la ligne de diagramms. Il est facile à comprendre, à intégrer et à personnaliser.
D'abord la caisse de la bibliothèque et de l'intégrer dans votre projet. Le code Source est hébergé sur github. GraphView bibliothèque sur github
Il est également possible de laisser le graphe évolutif (un zoom et défilement. Plus d'informations sur cette bibliothèque sur le post Original: Tableau et Graphique de la Bibliothèque pour Android
C'est comment il va ressembler:
Ensuite, vous pouvez facilement créer avec quelques lignes de code (voir l'extrait):
// 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);
Vous pouvez essayer de AChartEngine. Open-source et facile à utiliser.
C'est quelque chose que j'ai après l'étude de l'API Démos:
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();
}
}
};
Quelqu'un peut-il l'améliorer?