2016-11-30 2 views
1

Ist es möglich, benutzerdefinierten Text zwischen zwei Punkten im Diagramm anzuzeigen?MPAndroidChart Display-Label über der horizontalen Linie im Diagramm

Ich habe MPAndroidChart-Setup, um eine Schrittfunktion Typ Grafik (Stunden für eine bestimmte Aufgabe) mit nur horizontalen und vertikalen Linien anzuzeigen. Was ich gerne tun könnte, ist eine Beschriftung über den horizontalen Abschnitten zu zeigen, die die Größe des Abschnitts angibt (die berechnete Zeit wird berechnet, indem die Differenz zwischen den x-Werten genommen wird). Gibt es eine Möglichkeit, dies zu tun? Ich habe schon nachgesehen, wie ich die Bibliothek modifizieren kann, aber ich kann mir nicht vorstellen, wo der richtige Ort dafür ist.

Meine beste Schätzung wäre einige Änderungen in BarLineChartBase onDraw() Methode oder vielleicht in der LineChartRenderer drawLinear() Methode.

Hier ist, was ich in der Lage bin zu produzieren:

current graph

Hier ist ein Beispiel dafür, was ich zu erzeugen versuchen:

example graph

Antwort

1

es heraus! Fügen Sie der LineChart-Klasse am Ende von onDraw() direkt nach drawDescription() eine neue Methode drawTime() hinzu. Da jede horizontale Linie von 2 Einspeisepunkte I beschrieben einfach Schleife durch 2 Einträge zu einer Zeit für meinen einzigen Datensatz und die Differenz berechnet werden:

protected void drawTime(Canvas c) 
{ 
    Paint timePaint = new Paint(Paint.ANTI_ALIAS_FLAG); 

    timePaint.setTextSize(Utils.convertDpToPixel(16)); 
    timePaint.setColor(Color.BLUE); 
    timePaint.setTextAlign(Paint.Align.CENTER); 

    MPPointD position; 

    LineData data = this.getLineData(); 
    ILineDataSet dataSet = data.getDataSetByIndex(0); 
    for (int i = 1; i < dataSet.getEntryCount(); i+=2) 
    { 
     Entry e1 = dataSet.getEntryForIndex(i-1); 
     Entry e2 = dataSet.getEntryForIndex(i); 

     float time = e2.getX() - e1.getX(); 
     position = getPixelForValues(e1.getX() + time/2, e1.getY() - 0.05f, YAxis.AxisDependency.LEFT); 
     c.drawText(String.valueOf(time), (float)position.x, (float)position.y, timePaint); 
    } 
} 

Das resultierende Diagramm looks like this

Verwandte Themen