2016-11-30 2 views
1

Можно ли отображать собственный текст с центром в 2 точках на графике?Дисплей MPAndroidChart над горизонтальной линией на графике

У меня есть настройка MPAndroidChart для отображения графика типа функции (представляющего часы, потраченные на выполнение определенной задачи) только с горизонтальными и вертикальными линиями. То, что я хотел бы сделать, - показать ярлык над горизонтальными секциями, обозначающими размер раздела (так называемое время, затраченное на вычисление, принимая разницу между значениями х). Есть ли способ сделать это? Я искал модификацию библиотеки, но я не могу понять, где будет подходящее место для этого.

Мое лучшее предположение - некоторые изменения в методе BarLineChartBase onDraw() или, возможно, в методе LineChartRenderer drawLinear().

Вот что я способен производить:

current graph

Вот пример того, что я пытаюсь произвести:

example graph

ответ

1

Фигурные это! Просто добавьте новый метод drawTime() в класс LineChart в конце onDraw() сразу после drawDescription(). Так как каждая горизонтальная линия описывается 2 точки входа я просто петлю через 2 записей в то время для моих одиночных наборов данных и вычислить разницу:

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); 
    } 
} 

Полученный граф looks like this

Смежные вопросы