2016-04-05 3 views
1

Ich habe eine stackBar Chart. Ich möchte einen Wert über dem Balkendiagramm anzeigen und nicht für jeden Stapel der Leiste. Ich benutze MpAndroichart-Bibliothek und standardmäßig zeigt es Balken wie in Woche1.Wie oben auf Stackbar-Diagramm angezeigt werden

Ich möchte Wert auf Balken wie für Woche1 und nicht als Woche2 anzeigen.

enter image description here

+1

Wo ist Ihr Code? Post einige Bildschirmaufnahmen –

+0

Ich habe meine Post mit Usecase bearbeitet. –

Antwort

2

Ich wurde auch versucht, dies heute, um herauszufinden, und ich habe es mit einem kleinen trick.Here den das getan, was ich getan habe:

private BarData generateBarData() 
{ 
    ArrayList<String> xVals = new ArrayList<>(); 
    for(int i=0; i<mMonths.length; i++) 
    { 
     xVals.add(mMonths[i]); 
    } 

    ArrayList<BarEntry> yVals = new ArrayList<>(); 
    yVals.add(new BarEntry(new float[] {15, 5, 5}, 0)); 
    yVals.add(new BarEntry(new float[] {12, 2, 6}, 1)); 
    yVals.add(new BarEntry(new float[] {15, 3, 4}, 2)); 
    yVals.add(new BarEntry(new float[] {15, 5, 1}, 3)); 
    yVals.add(new BarEntry(new float[] {13, 4, 1}, 4)); 
    yVals.add(new BarEntry(new float[] {10, 2, 1}, 5)); 
    yVals.add(new BarEntry(new float[] {15, 10, 2}, 6)); 
    yVals.add(new BarEntry(new float[] {15, 2, 1}, 7)); 
    yVals.add(new BarEntry(new float[] {14, 3, 6}, 8)); 
    yVals.add(new BarEntry(new float[] {15, 7, 2}, 9)); 
    yVals.add(new BarEntry(new float[] {15, 3, 1}, 10)); 
    yVals.add(new BarEntry(new float[] {11, 2, 4}, 11)); 

    ValueFormatter custom = new MyBarValueFormatter(mContext); 

    BarDataSet set = new BarDataSet(yVals, "Data Set"); 
    set.setBarSpacePercent(45f); 
    set.setColors(getColors()); 

    set.setHighlightEnabled(false); 
    set.setValueFormatter(custom); 
    set.setDrawValues(true); 

    BarData barData = new BarData(xVals, set); 

    return barData; 
} 

private int[] getColors() { 
    int[] colors = new int[3]; 
    colors[0] = getResources().getColor(R.color.barColor1); 
    colors[1] = getResources().getColor(R.color.barColor2); 
    colors[2] = getResources().getColor(R.color.barColor3); 
    return colors; 
} 

In obigem Code I Beispieldaten für die BarChart erzeugt habe, und ich habe mein Trick in MyBarValueFormatter Klasse wie folgt getan.

public class MyBarValueFormatter implements ValueFormatter { 

    private DecimalFormat mFormat; 
    private Context context; 

    int toggle; 
    float totalVal; 

    public MyBarValueFormatter(Context context){ 
     toggle = 0; 
     totalVal = 0; 
     this.context = context; 
     mFormat = new DecimalFormat("###,###,###,##0"); 
    } 

    @Override 
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { 

     if(toggle % 3 == 0){ 
      toggle++; 
      totalVal = value; 
      return ""; 
     } 
     else if(toggle % 3 == 1){ 
      toggle++; 
      totalVal = totalVal + value; 
      return ""; 
     } 
     else{ 
      toggle++; 
      totalVal = totalVal + value; 
      return context.getResources().getString(R.string.rupee) + " " + mFormat.format(totalVal) + "000"; 
     } 
    } 
} 

Dies wird nicht nur den Top-Wert in gestapeltes Balkendiagramm zeigen, sondern zeigt auch die Summe aller gestapelten Werte in der Bar. Hoffe das hilft!

enter image description here

+0

Vielen Dank für Ihre Antwort. Sehr hilfreich. –

+0

In diesem Fall sollten Sie die Antwort akzeptieren @KomalGupta –

+0

Ich habe bereits @maninder Singh –

0
for (IDataSet set : mChart.getData().getDataSets()){ 
    set.setDrawValues(set.isDrawValuesEnabled()); 
} 

Verwenden Sie diesen Wert für die Anzeige auf der Bar.

+0

Tatsächlich ist die Summe aller Werte für alle meine Balken im Balkendiagramm 100. Jeder Stapel würde% Wert darstellen. Aber oben auf meiner Leiste möchte ich einen anderen Wert anzeigen, den ich aus einem anderen Attribut abrufe. Sagen Sie den Gesamtpreis. –

Verwandte Themen