MPAndroidChart - Линейная диаграмма не показывает линию - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь построить LineChart с MPAndroidChart, чтобы представить значение, которое я получаю из моего децибелметра. Проблема в том, что я получаю только движущуюся точку, которая представляет текущее значение, но я хотел бы иметь линию, которая при движении показывает значения. Что-то вроде ЭЭГ, чтобы быть ясным.

Это весь код, связанный с диаграммой в методе 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 голосов
/ 02 мая 2018

Проблема в следующей строке:

List<Entry> entries = new 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();
}
...