Как отобразить график в реальном времени в mpandroidchart?

Я использую 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.

пожалуйста, обратитесь по этой ссылке, это может вам помочь: android.jlelse.eu/…

Mohsin mithawala 29.05.2018 12:49

Пожалуйста, посмотрите мой ответ для графика в реальном времени: stackoverflow.com/a/50531511/3101777

Misha Akopov 29.05.2018 12:55

Спасибо @MishaAkopov. Сообщите мне, какие строки нужно добавить при сравнении с моим кодом? Не могли бы вы ответить на него, отредактировав мой. так что позвольте мне принять и закрыть его.

Shiv 29.05.2018 13:03

@Shiv В вашем коде у вас есть все точки сразу, поэтому график рисуется мгновенно. Вы хотите рисовать график по одной точке с некоторыми интервалами, например, через 1 секунду?

Misha Akopov 29.05.2018 14:32

Да, вы правы, @MishaAkopov, мне нужно отображать с интервалом в 1 секунду.

Shiv 29.05.2018 18:14

Но я не знаю, как это сделать. :( Помогите пожалуйста пожалуйста.

Shiv 29.05.2018 18:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
3 554
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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); но ничего не работает идеально. :(

Shiv 30.05.2018 06:14

См. Обновленный ответ, 4000 миллисекунд - слишком маленькое число для анимации многих точек, вы должны установить 1000 на точку, и вы получите опыт в реальном времени для всех точек.

Misha Akopov 30.05.2018 08:20

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