Полная перерисовка chart при смене DataProvider

В продолжение вот этого решенного вопроса.

Возможно ли сделать так, чтобы чарт в кубе не перерисовывался целиком при смене DataProvider? Собственно в семпле amCharts анимация pull работает как положено. В кубе сначала полностью перерисовывается чарт, затем срабатывает анимация.

Добрый день!

Да, Вы правы, при замене DataProvider график перерисовывается, т.к. заново формируется конфигурация графика. Чтобы избежать полной перерисовки, и как следствие срабатывание анимации, могу посоветовать не заменять DataProvider, а воспользоваться Incremental Upate (документация и демо).

С уважением,
Глеб

2 симпатии

Глеб, к сожалению сейчас я это не проверил, вернусь позже, когда смогу проверить, но, мне кажется, что я пытался сделать это с помощью методов ListDataProvider.addItem() и ListDataProvider.removeItem() и все равно происходила полная перерисовка графика.
Или корректно будет работать только при использовании CollectionDataSource?

Нет, ListDataProvider так же публикует события добавления/удаления объекта.

Глеб, я правильно понял, что при использовании вышеназванных методов анимация должна отрабатывать корректно? Если так, то вот демо-проект, на котором это не работает.

При Incremental Upate анимация не срабатывает (и не должна), т.к. не происходит полной перерисовки графика, о чем я и писал.

Возможно я не совсем понял изначальную проблему. Вы хотите, чтобы анимация срабатывала?

Видимо я запутался в терминах и запутал вас.

Вот семпл. https://www.amcharts.com/demos/pie-chart-broken-slices/
На нем при клике на слайс срабатывает анимация pulled и не происходит полной перерисовки чарта.

Я хочу, что бы при изменении данных в DataProvider не происходило полной перерисовки чарта.
В приложенном проекте я по клику ЛКМ на слайс добавляю данные в DataProvider и удаляю при клике ПКМ. При этом происходит полная перерисовка чарта.

Существует два варианта:

  • Замена DataProvider - в таком случае происходит полная перерисовка графика и как следствие происходит первоначальная анимация показа графика.
  • Использовании методов add/remove (или аналогичные в datasource) - в таком случае полная перерисовка не происходит, и нет анимации.

Так же прошу заметить, что сэмпл, на который Вы ссылаетесь, использует AmCharts 4, тогда как в платформе используется AmCharts 3.

Это я уже понял. Тогда прошу зафиксировать ошибку или подсказать, что я делаю не так. В проекте выше, как я уже написал, происходит полная перерисовка чарта:

    @Override
    public void init(Map<String, Object> params) {
        super.init(params);

        final ListDataProvider initialDataProvider = new ListDataProvider();
        initialDataProvider.addItem(new MapDataItem().add("value", "green").add("qty", 5));
        initialDataProvider.addItem(new MapDataItem().add("value", "red").add("qty", 10));

        piechart.setDataProvider(initialDataProvider);
        final MapDataItem add = new MapDataItem().add("value", "blue").add("qty", 2);

        piechart.addSliceClickListener(event -> initialDataProvider.addItem(add));
        piechart.addRightClickListener(event -> initialDataProvider.removeItem(add));
    }

В данном случае это не принципиально.

Я не могу открыть Ваш проект, т.к. он использует другой репозиторий, к которому у меня нет доступа и подключает app component, к которому у меня так же нет доступа, если переключиться на стандартный репозиторий. Ссылку на проект я удалил, т.к. там Ваши личные логин и пароль.

1 симпатия

Спасибо. Никак не привыкну переключать репо.

Поменял репозиторий.

А вот это странно. Кроме чартов к проекту более ничего не подключено.

PieChart.zip (77,5 КБ)

Спасибо за демо проект. На самом деле, полной перерисовки графика не происзодит, но именно для PieChart происходит срабатывание анимации (для других типов графиков такого не происходит).

В качестве решения, можно задать startDuration="0", либо в XML, чтобы анимации не было вообще, либо после первого отображения чарта, чтобы анимации не было при изменнии данных.

Я завел GitHub issue - https://github.com/cuba-platform/charts/issues/68.

С уважением,
Глеб

1 симпатия