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
график в конечном итоге был включен. Это каким-то образом сбрасывает окно просмотра графика, что приводит к скачкам.