MPAndroidChart - 折线图未显示行

时间:2018-04-27 19:07:13

标签: android mpandroidchart

我试图用MPAndroidChart构建一个LineChart来表示我从分贝计得到的值。问题是我只得到一个代表当前值的移动点,但是我希望有一条线在移动时显示值。像脑电图一样清楚。

这是onCreate()方法中与图表相关的所有代码:

chart.getDescription().setEnabled(true);
chart.getDescription().setText("Decibel chart");

chart.setTouchEnabled(false);
chart.setDragEnabled(false);
chart.setScaleEnabled(false);
chart.setPinchZoom(false);
chart.setBackgroundColor(Color.LTGRAY);

Legend l = chart.getLegend();
l.setForm(Legend.LegendForm.LINE);
l.setTextColor(Color.BLUE);

YAxis leftAxis = chart.getAxisLeft();
leftAxis.setTextColor(Color.BLUE);
leftAxis.setDrawGridLines(false);
leftAxis.setAxisMaximum(100f);
leftAxis.setAxisMinimum(0f);

chart.setDrawBorders(true);

这些是我用来更新图表中数据的方法:

private LineDataSet createSet(List<Entry> entries) {
    LineDataSet set = new LineDataSet(entries, "Decibel Data");
    set.setAxisDependency(YAxis.AxisDependency.LEFT);
    set.setLineWidth(4f);
    set.setColor(Color.RED);
    set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
    set.setCubicIntensity(0.2f);

    return set;
}

private void updateChart(float x, float y) {

    List<Entry> entries = new ArrayList<>();
    entries.add(new Entry(x, y));

    if (entries.isEmpty()) {
        chart.clear();
    } else {
        LineDataSet lineDataSet = createSet(entries);
        LineData data = new LineData(lineDataSet);
        data.setValueTextColor(Color.BLUE);
        chart.setData(data);
        chart.notifyDataSetChanged();
        chart.invalidate();
    }
}

由于我需要动态更新数据,因此从线程调用updateChart(float x,float y)。 这是我在运行应用程序时看到的内容: chart_screenshot

我该怎么做才能解决问题?

1 个答案:

答案 0 :(得分:0)

问题出在以下几行:

List<Entry> entries = new ArrayList<>();

每当您收到一个值的更新时,您都会创建新的arraylist。您需要在onCreate()之前在活动之上声明条目:

private List<Entry> entries = new ArrayList<>();

之后将更新方法更改为:

private void updateChart(float x, float y) 
{
    entries.add(new Entry(x, y));
    LineDataSet lineDataSet = createSet(entries);
    LineData data = new LineData(lineDataSet);
    data.setValueTextColor(Color.BLUE);
    chart.setData(data);
    chart.notifyDataSetChanged();
    chart.invalidate();
}