Застрял в движущемся графике, используя achartEngine

1

Привет друзья, я использовал графики в приложении для Android. В том, что я обновляю график каждую секунду. Теперь я хочу переместить этот график справа налево, обновляя значение. Любой может подумать, как это сделать? Любая помощь оценивается.

 dataset = new XYMultipleSeriesDataset();

         renderer = new XYMultipleSeriesRenderer();

         renderer.setChartTitleTextSize(12);
         renderer.setLabelsTextSize(15);
         renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
         renderer.setApplyBackgroundColor(true);
         renderer.setBackgroundColor(Color.TRANSPARENT);
         renderer.setZoomEnabled(false, false);
         renderer.setPointSize(5f);
         renderer.setShowGrid(true);
         renderer.setXTitle("Time");
         renderer.setYTitle("Number");

         rendererSeries = new XYSeriesRenderer();

         rendererSeries.setColor(Color.BLUE);
         rendererSeries.setFillBelowLine(false);
         rendererSeries.setFillPoints(true);
         rendererSeries.setPointStyle(PointStyle.CIRCLE);
         renderer.addSeriesRenderer(rendererSeries);

         timeSeries = new TimeSeries("Random");
         mThread = new Thread(){
             public void run(){
                 while(true){
                     try {
                         Thread.sleep(2000L);
                     } 
                     catch (InterruptedException e) {
                         e.printStackTrace();
                     }

                     timeSeries.add(new Date(), random.nextInt(10));
                     mchartView.repaint();
                 }
             }
         };
         mThread.start();

         dataset.addSeries(timeSeries);
         mchartView = ChartFactory.getLineChartView(Pedometer.this, dataset, renderer);
         mchartView.refreshDrawableState();
         mchartView.repaint();

         llChart.addView(mchartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  • 0
    Размещение вашего кода для вашей деятельности, включая разделы обновления графиков, облегчит вам ответ.
  • 0
    Я обновил свой вопрос.
Показать ещё 1 комментарий
Теги:
graph
achartengine

4 ответа

2
Лучший ответ

Вы можете использовать setRange для установки требуемого диапазона каждый раз, когда вы добавляете новую точку. Например:

double maxX = timeSeries.getMaxX();
double minX = maxX - deltaX; // deltaX is your required x-range
double maxY = timeSeries.getMinY();
double minY = timeSeries.getMaxY();

renderer.setRange(new double[] { minX, maxX, minY, maxY });

Таким образом, ваш правый край всегда показывает максимальное время, а остальная часть графика будет перемещаться справа налево.

Надеюсь, поможет.

  • 0
    Эй, братан, свойство setRange из библиотеки achartEngine ???? Я не нахожу ...
  • 0
    Но приходится использовать XYMultipleSeriesRenderer renderer.setRange .......
Показать ещё 1 комментарий
0

В моем коде я придумал следующую идею:

    private void animatePlot(float t, float[] v) {
            // moving plot
            datasets[i].add(t, v[i]);
            if (mPointsCount > GRAPH_RESOLUTION)
                datasets[i].remove(0);
            view.repaint();
            mPointsCount++;
    }
  • t и v соответствуют значениям графика x, y.
  • t растет.
  • когда я получаю новые данные (t и v), я вызываю эту функцию.
  • GRAPH_RESOLUTION - количество точек, показанных на графике, из которого график начинает двигаться влево.
0

Легкий способ позволить вашему графику автоматически вычислять свои оси min и max, чтобы установить их на минимальное и максимальное значение, а затем перерисовать. Например:

mRenderer.setXAxisMax(-Double.MAX_VALUE);
mRenderer.setXAxisMin(Double.MAX_VALUE);
mRenderer.setYAxisMax(-Double.MAX_VALUE);
mRenderer.setYAxisMin(Double.MAX_VALUE);

mChartView.repaint();

Я не знаю, лучший ли это вариант, но он работает для меня!

ссылка: Мой Android AChartEngine уже работает, но как заставить его выглядеть хорошо?

0

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

Если вы используете TimeSeries, я думаю, что вы используете, вы должны иметь возможность называть timeSeries.setMaximumItemCount(maxNumPoints) а временные ряды позаботятся об остальном.

Надеюсь это поможет.

  • 0
    Привет, спасибо за ответ, но TimeSeries не показал мне такого рода свойства.
  • 0
    У него есть метод удаления? Что такое оператор импорта для временных рядов (какой пакет вы используете) Я нашел несколько имплиментаций в сети, и все они имели свойство maxcount и метод удаления.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню