Souvent dans nos applications le meilleur moyen de refléter des données, c’est de les présenter sous forme de Graphique statistique. Pour réaliser ces graphiques sous Android il y a deux possibilités, soit vous passez des journées à le développer vous même, soit vous intégrez une bibliothèque, qui permet de le réaliser en peu de temps. J’ai choisi la deuxième solution, je vais donc utiliser pour réaliser mon premier graphique statistique la Librairie du site java4less.
D’abord, il faut importer cette librairie dans votre projet Android, pour cela sur votre projet vous devez faire clique droit->Propriété->Java build path->Librairie->Add external jars
.
Je vais dans mon projet, créer une représentation de deux séries de valeur dans un Diagramme de Barre. Le résultat que je veux obtenir est celui-ci:
.
D’abord j’intégre les différentes classes dans votre projet.
[source language=’java’]
import com.java4less.rchart.Chart;
import com.java4less.rchart.ChartLoader;
import com.java4less.rchart.android.ChartPanel;
[/source]
Je crée un objet cha de type ChartLoader et un autre objet de type ChartPanel.
[source language=’java’] public class GraphAndroid extends Activity {/** Called when the activity is first created. */
ChartLoader cha;
ChartPanel chartPanel;
}
[/source]
Dans ma méthode onCreate(Bundle icicle) j’instancie mon objet cha, puis je lui affecte des paramètres avec sa methode setParameter.
[source language=’java’]
cha=new ChartLoader();
//Titre du diagramme
cha.setParameter(“TITLECHART”,”Graph Android France”);
//police du diagramme
cha.setParameter(“TITLE_FONT”,”Serif|BOLD|12″);
cha.setParameter(“LEGEND”,”NO”);
cha.setParameter(“XSCALE_MIN”,”0″);
cha.setParameter(“XSCALE_MAX”,”5.5″);
cha.setParameter(“YSCALE_MIN”,”-15″);
cha.setParameter(“BIG_TICK_INTERVALX”,”1″);
cha.setParameter(“BIG_TICK_INTERVALY”,”1″);
cha.setParameter(“TICK_INTERVALY”,”10″);
cha.setParameter(“XAXIS_LABELS”,”June| |Aug.| |Oct.| |Dec.”);
cha.setParameter(“CERO_XAXIS”,”LINE”);
cha.setParameter(“YAXIS_INTEGER”,”TRUE”);
cha.setParameter(“SERIE_1″,”Products”);
cha.setParameter(“SERIE_2″,”Services”);
cha.setParameter(“SERIE_TYPE_1″,”BAR”);
cha.setParameter(“SERIE_TYPE_2″,”BAR”);
cha.setParameter(“SERIE_FONT_1″,”Arial|PLAIN|7”);
cha.setParameter(“SERIE_FONT_2″,”Arial|BOLD|7”);
cha.setParameter(“BOTTOM_MARGIN”,”0.18″);
cha.setParameter(“LEFT_MARGIN”,”0.1″);
cha.setParameter(“RIGHT_MARGIN”,”0.1″);
cha.setParameter(“LEGEND_MARGIN”,”0″);
//serie de donnée pour le diagramme 1
cha.setParameter(“SERIE_DATA_1″,”12|43|50|45|30”);
//serie de donnée pour le diagramme 2
cha.setParameter(“SERIE_DATA_2″,”-10|41|48|39|36″);
cha.setParameter(“SERIE_BORDER_TYPE_1″,”RAISED”);
cha.setParameter(“SERIE_BORDER_TYPE_2″,”RAISED”);
//couleur pour le diagramme 1
cha.setParameter(“SERIE_BAR_STYLE_1″,”0xff00”);
//couleur pour le diagramme 2
cha.setParameter(“SERIE_BAR_STYLE_2″,”0xff”);
cha.setParameter(“BARCHART_BARSPACE”,”1″);
cha.setParameter(“CHART_FILL”,”0xffcc00″);
cha.setParameter(“SERIE_NEGATIVE_STYLE_2″,”RED”);
cha.setParameter(“YLABEL_VERTICAL”,”TRUE”);
cha.setParameter(“BARCHART_BARSPACE”,”5″);
cha.setParameter(“SERIE_FORMAT_1″,”0”);
[/source]
Les noms des paramètres son assez explicite. Ceux qui sont vraiment intéressants sont SERIE_DATA_1 et SERIE_DATA_2 dans lesquels je passe mes valeurs séparées par un ” | “, et SERIE_BAR_STYLE_1 et SERIE_BAR_STYLE_2 dans lesquels je donne la valeur de la couleur de mes diagrammes.
Pour l’affichage de mon diagramme je crée l’objet previewcha de type Chart, qui est instancie par la méthode build de mon objet cha. Avec les methode je donne la dimension de mon image.
[source language=’java’]
Chart previewcha =cha.build(false,false);
previewcha .setWidth(300);
previewcha .setHeight(300);
[/source]
Pour afficher mon diagramme, j’utilise l’objet ChartPanel que je passe dans la méthode setContentView(chartPanel);
[source language=’java’]
chartPanel = new ChartPanel(this);
chartPanel.setChart(c);
setContentView(chartPanel);
[/source]
Code source complet
[source language=’java’] package org.com.graphandroid;
import com.java4less.rchart.Chart;
import com.java4less.rchart.ChartLoader;
import com.java4less.rchart.android.ChartPanel;
import android.app.Activity;
import android.os.Bundle;
public class GraphAndroid extends Activity {
/** Called when the activity is first created. */
ChartLoader cha;
ChartPanel chartPanel;
@Override
public void onCreate(Bundle icicle) {
cha=new ChartLoader();
cha.setParameter(“TITLECHART”,”Graph Android France”);
cha.setParameter(“TITLE_FONT”,”Serif|BOLD|12″);
cha.setParameter(“LEGEND”,”NO”);
cha.setParameter(“XSCALE_MIN”,”0″);
cha.setParameter(“XSCALE_MAX”,”5.5″);
cha.setParameter(“YSCALE_MIN”,”-15″);
cha.setParameter(“BIG_TICK_INTERVALX”,”1″);
cha.setParameter(“BIG_TICK_INTERVALY”,”1″);
cha.setParameter(“TICK_INTERVALY”,”10″);
cha.setParameter(“XAXIS_LABELS”,”June| |Aug.| |Oct.| |Dec.”);
cha.setParameter(“CERO_XAXIS”,”LINE”);
cha.setParameter(“YAXIS_INTEGER”,”TRUE”);
cha.setParameter(“SERIE_1″,”Products”);
cha.setParameter(“SERIE_2″,”Services”);
cha.setParameter(“SERIE_TYPE_1″,”BAR”);
cha.setParameter(“SERIE_TYPE_2″,”BAR”);
cha.setParameter(“SERIE_FONT_1″,”Arial|PLAIN|7”);
cha.setParameter(“SERIE_FONT_2″,”Arial|BOLD|7”);
cha.setParameter(“BOTTOM_MARGIN”,”0.18″);
cha.setParameter(“LEFT_MARGIN”,”0.1″);
cha.setParameter(“RIGHT_MARGIN”,”0.1″);
cha.setParameter(“LEGEND_MARGIN”,”0″);
cha.setParameter(“SERIE_DATA_2″,”-10|41|48|39|36″);
cha.setParameter(“SERIE_BORDER_TYPE_1″,”RAISED”);
cha.setParameter(“SERIE_BORDER_TYPE_2″,”RAISED”);
cha.setParameter(“SERIE_BAR_STYLE_1″,”0xff00”);
cha.setParameter(“SERIE_BAR_STYLE_2″,”0xff”);
cha.setParameter(“BARCHART_BARSPACE”,”1″);
cha.setParameter(“CHART_FILL”,”0xffcc00″);
cha.setParameter(“SERIE_NEGATIVE_STYLE_2″,”RED”);
cha.setParameter(“YLABEL_VERTICAL”,”TRUE”);
cha.setParameter(“SERIE_DATA_1″,”12|43|50|45|30”);
cha.setParameter(“BARCHART_BARSPACE”,”5″);
cha.setParameter(“SERIE_FORMAT_1″,”0”);
Chart previewcha =cha.build(false,false);
previewcha.setWidth(300);
previewcha.setHeight(300);
// this is to be able to load the images
super.onCreate(icicle);
chartPanel = new ChartPanel(this);
chartPanel.setChart(previewcha );
setContentView(chartPanel);
}
}
[/source]
La licence de cette librairie coute 35 euros
Vous disposez avec cette librairie de plusieurs autre vues statisitiques