MPAndroidChart在图表上的水平线上显示标签

时间:2016-11-30 20:04:52

标签: java android graph mpandroidchart

是否可以在图表上的2个点之间显示自定义文本?

我已经安装了MPAndroidChart来显示仅具有水平和垂直线的步进功能类型图(表示执行特定任务所花费的时间)。我希望能够做的是在水平部分上显示标签,指示部分的大小(也就是通过取x值之间的差异计算所花费的时间)。有没有办法做到这一点?我一直在考虑修改图书馆,但我似乎无法弄清楚哪里是正确的地方。

我最好的猜测是BarLineChartBase onDraw()方法或者LineChartRenderer drawLinear()方法中的一些更改。

以下是我能够制作的内容:

current graph

这是我想要制作的一个例子:

example graph

1 个答案:

答案 0 :(得分:1)

想出来!只需在drawDescription()之后的onDraw()末尾添加一个新方法drawTime()到LineChart类。由于每个水平线由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