MPAndroidChart В реальном времени LineChart переходит на addEntry

Я использую MPAndroidChart для отображения значений, поступающих периодически (каждые 3 секунды). Значения добавляются в набор данных в основном потоке, затем setVisibleXRangeMaximum(10) вызывается, и после этого представление перемещается в конец, используя moveViewToX(dataSet.getEntryCount()),

Это, однако, приводит к тому, что диаграмма немного смещается влево (примерно на десятую часть ширины между двумя точками данных) вместо отображения новейших данных. Если я прокручиваю между добавлением двух точек, представление переходит к началу набора данных.

Как я могу добиться поведения, обнаруженного в примере приложения, когда в представлении отображаются 10 записей одновременно и прокручивается самая новая запись при добавлении?

Вот как я инициализирую график:

// Initializing
v = LayoutInflater.from(parent.getContext())
        .inflate(R.layout.device_detail_element_graph, parent, false);
LineChart chart = (LineChart) v.findViewById(R.id.lineChart);

LineData lineData = new LineData();
lineData.setDrawValues(false);
chart.setDrawBorders(false);
chart.setDrawMarkers(false);
chart.getLegend().setEnabled(false);
chart.getAxisRight().setEnabled(false);
chart.setDrawGridBackground(false);
chart.setDescription(null);
chart.setData(lineData);
chart.setTouchEnabled(true);
chart.setData(lineData);
chart.notifyDataSetChanged();

И как я добавляю новые точки данных (называемые периодически):

LineData data = chart.getData();

ILineDataSet dataSet = data.getDataSetByIndex(0);

if(dataSet == null){
    dataSet = new LineDataSet(null, "Dynamic data");
    dataSet.setValueTextColor(Color.TRANSPARENT);
    dataSet.setHighlightEnabled(false);
    data.addDataSet(dataSet);
}
int  lastIndex = dataSet.getEntryCount();

dataSet.addEntry(new Entry(lastIndex, (float) newValue.getValue()));

data.notifyDataChanged();
chart.notifyDataSetChanged();
chart.setVisibleXRangeMaximum(20.0f);

chart.moveViewToX(dataSet.getEntryCount());

1 ответ

Понял. Когда я вызывал функцию, которая добавляла новые записи в график, я всегда вызывал notifyDataChanged на RecyclerView график в конечном итоге был включен. Это каким-то образом сбрасывает окно просмотра графика, что приводит к скачкам.

Другие вопросы по тегам