Graphique à barres à l'aide d'achartengine

Je veux dessiner un graphique à barres contenant cinq barres individuelles – j'ai utilisé Achartengine. Je peux afficher les cinq barres de la même couleur mais je veux différencier une barre d'une couleur différente, mais je ne peux pas afficher plus d'une couleur. Veuillez me montrer comment afficher différentes couleurs. Mon code …

values.add(new double[] {21,56,33,10,20}); int[] colors = new int[] { Color.rgb(227, 121, 15) }; XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); setChartSettings(renderer, "", "", "", 0,5, 0,100, Color.WHITE, Color.WHITE); renderer.setXLabels(8); renderer.setYLabels(10); renderer.setDisplayChartValues(true); mChartView= ChartFactory.getBarChartView(context, buildBarDataset(titles, values), renderer, Type.DEFAULT); layout.addView(mChartView, 350, 500); 

  • Mise en page relative Ne pas se décomposer comme défini
  • Android org.xmlpull.v1.XmlPullParserException tout en analysant XML
  • Comment garder un IntentService en cours d'exécution même lorsque l'application est fermée?
  • Télécharger et extraire le fichier Zip dans Android
  • Le contrôleur de sous-titres devrait-il déjà configurer l'erreur Mediaplayer Android
  • Comment ajouter des tags aux traces de pile Android?
  • Appcompat manquant dans le dossier sdk
  • Android - problèmes d'utilisation de FragmentActivity + Loader pour mettre à jour FragmentStatePagerAdapter
  • Android - Comment dessiner un dégradé basé sur l'arc
  • Exécution de commandes AdB sur tous les périphériques connectés
  • Plein écran dans WindowManager
  • Android Studio - Entrée de ressources déjà définie
  • 4 Solutions collect form web for “Graphique à barres à l'aide d'achartengine”

    Peut être atteint en étendant les classes SimpleSeriesRenderer et BarChart. Voici ma solution pour RangeBarChart (tout cela grâce à gilenodm, j'aimerais avoir une certaine réputation pour justifier votre réponse):

     import org.achartengine.renderer.SimpleSeriesRenderer; public class AdvancedSeriesRenderer extends SimpleSeriesRenderer { private int [] colors; public void AdvancedSeriesRenderer () { } public int getColor ( int position ) { return colors[position]; } } import org.achartengine.chart.RangeBarChart; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.renderer.SimpleSeriesRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; public class AdvancedRangeBarChart extends RangeBarChart { private int [] barChartColors; public AdvancedRangeBarChart ( XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, Type type ) { super ( dataset, renderer, type ); } public void setColors ( int [] colorsIn ) { barChartColors = colorsIn; } @Override public void drawSeries ( Canvas canvas, Paint paint, float [] points, SimpleSeriesRenderer seriesRenderer, float yAxisValue, int seriesIndex, int startIndex ) { int seriesNr = mDataset.getSeriesCount (); int length = points.length; paint.setStyle ( Style.FILL ); float halfDiffX = getHalfDiffX ( points, length, seriesNr ); int start = 0; if ( startIndex > 0 ) { start = 2; } for ( int i = start; i < length; i += 4 ) { int colorIndex = (int) ( i / 4 ) % barChartColors.length; paint.setColor ( barChartColors[colorIndex] ); if ( points.length > i + 3 ) { float xMin = points[i]; float yMin = points[i + 1]; // xMin = xMax float xMax = points[i + 2]; float yMax = points[i + 3]; drawBar ( canvas, xMin, yMin, xMax, yMax, halfDiffX, seriesNr, seriesIndex, paint ); } } } } 

    J'ai fait un hack pour atteindre cet effet. Org.achartengine.SimpleSeriesRenderer changé la classe, j'ai ajouté des int[] colors et un boolean multipleColorsEnabled avec ses getters et ses setters. Donc, j'ai changé, org.achartengine.BarChart en classe, la méthode drawSeries, où est définie la couleur de chaque barre dans une boucle, comme suit:

     int j = startIndex; for (int i = 0; i < length; i += 2) { if (seriesRenderer.isMultipleColorsEnabled()) { paint.setColor(seriesRenderer.getColors()[j++]); } else { paint.setColor(seriesRenderer.getColor()); } float x = points[i]; float y = points[i + 1]; drawBar(canvas, x, yAxisValue, x, y, halfDiffX, seriesNr, seriesIndex, paint); } 

    Dans la classe qui charge les données utilisées:

     seriesRenderer.setMultipleColorsEnabled(true); seriesRenderer.setColors(myColors); 

    Cela fait longtemps que j'utilise l'achartengine, mais je pense que chaque série doit avoir sa propre couleur. En tant que solution de contournement, vous pouvez créer la barre que vous voulez différencier un membre de sa propre série et définir une couleur différente pour cette série. Peut-être que quelqu'un d'autre a une meilleure façon.

    Vous devez utiliser différents SimpleSeriesRenderer à l' intérieur d' un appel buildBarRenderer () , et définir autant de séries que le nombre de couleurs souhaité, de cette façon (en remplaçant vos deux premières lignes de code):

     values.add(new double[] {21}); values.add(new double[] {56}); values.add(new double[] {33}); //ETC. int[] colors = new int[] { Color.rgb(227, 121, 15), Color.rgb(227, 121, 227), Color.rgb(127, 121, 127) }; 

    Le reste du code devrait être le même que le vôtre, mais je ne l'ai pas testé. AFAIK vous avez besoin de séries différentes , car chaque série ne peut avoir qu'une seule couleur.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.