Я использую MPAndroidChart Мне нужно отображать линейную диаграмму в реальном времени. Но проблема в том, что он отображается после всего завершенного. На самом деле он должен строиться как в реальном времени. Я пробовал,
private void updateUI(final ArrayList<TimeModel> pJsonObject) {
for(int i=0;i<pJsonObject.size();i++){
int speedRates = pJsonObject.get(i).getSpeedRate();
String time = String.valueOf(pJsonObject.get(i).getTotalTime());
xAxes.add(time);
//yAxes.add(new Entry(10, 0));
yAxes.add(new Entry(speedRates,i));
}
String[] xaxes = new String[xAxes.size()];
for (int i = 0; i < xAxes.size(); i++) {
xaxes[i] = xAxes.get(i).toString();
}
LineDataSet lineDataSet = new LineDataSet(yAxes, "Time");
lineDataSet.setDrawCircles(true);
lineDataSet.setColor(Color.GREEN);
lineDataSets.add(lineDataSet);
linechart.setData(new LineData(xaxes, lineDataSets));
linechart.setVisibleXRangeMaximum(65f);
// linechart.setTouchEnabled(true);
// linechart.setDragEnabled(true);
linechart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
linechart.getAxisLeft().setDrawGridLines(false);
linechart.getXAxis().setDrawGridLines(false);
YAxis yAxisRight = linechart.getAxisRight();
yAxisRight.setEnabled(false);
linechart.animateXY(3000, 3000);
}
Но это строится как законченный. Мне нужно построить график в реальном времени в режиме mpandroid.
Пожалуйста, посмотрите мой ответ для графика в реальном времени: stackoverflow.com/a/50531511/3101777
Спасибо @MishaAkopov. Сообщите мне, какие строки нужно добавить при сравнении с моим кодом? Не могли бы вы ответить на него, отредактировав мой. так что позвольте мне принять и закрыть его.
@Shiv В вашем коде у вас есть все точки сразу, поэтому график рисуется мгновенно. Вы хотите рисовать график по одной точке с некоторыми интервалами, например, через 1 секунду?
Да, вы правы, @MishaAkopov, мне нужно отображать с интервалом в 1 секунду.
Но я не знаю, как это сделать. :( Помогите пожалуйста пожалуйста.




Вот код. Он запускает поток, затем в цикле вы добавляете записи в диаграмму (в данном случае 500 баллов), и после каждого добавления поток спит на 1000 миллисекунд (1 секунду), и это ваш интервал:
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 500; i++) {
runOnUiThread(new Runnable() {
@Override
public void run() {
addEntry();
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}).start();
Для простой анимации с интервалом в 1 секунду для каждой точки используйте это
mChart.animateX(1000 * pointCount);
например, в вашем случае:
mChart.animateX(1000 * xAxes.size());
что мне нужно использовать при добавлении записи? Проще говоря, мне нужно подобное. i.stack.imgur.com/mzS9c.gif я пробовал использовать //linechart.animateXY(4000, 4000); linechart.animateY (4000, Easing.EasingOption.EaseInBack); но ничего не работает идеально. :(
См. Обновленный ответ, 4000 миллисекунд - слишком маленькое число для анимации многих точек, вы должны установить 1000 на точку, и вы получите опыт в реальном времени для всех точек.
пожалуйста, обратитесь по этой ссылке, это может вам помочь: android.jlelse.eu/…