Столбчатая диаграмма не обновляется, если значение столбца уменьшается - PullRequest
2 голосов
/ 25 марта 2020

Если значения в столбчатой ​​диаграмме увеличиваются, обновляется столбчатая диаграмма и все выглядит хорошо. Но когда значение уменьшается, столбцы не обновляются и по-прежнему отображаются старые значения.

private fun drawColumnChart() {
    UpdateSuspender.using(lineChart) {
        lineChart.theme = R.style.SciChart_Bright_Spark
        Collections.addAll(lineChart.renderableSeries, rSeries)
        Collections.addAll(lineChart.chartModifiers, sciChartBuilder
                .newModifierGroupWithDefaultModifiers().build())
        sciChartBuilder.newAnimator(rSeries)
                .withWaveTransformation()
                .withInterpolator(DecelerateInterpolator())
                .withDuration(3000)
                .withStartDelay(350)
                .start()
    }
}

private fun createDataSeries(values: Array<Int>): IXyDataSeries<Int, Int> {
    val dataSeries: IXyDataSeries<Int, Int> = sciChartBuilder
            .newXyDataSeries(Int::class.javaObjectType, Int::class.javaObjectType).build()
    for (i in values.indices) {
        dataSeries.append(i, values[i])
    }
    return dataSeries;
}

private fun createRSeries(values: Array<Int>): FastColumnRenderableSeries {

    val dataSeries: IXyDataSeries<Int, Int> = createDataSeries(values)

    return sciChartBuilder.newColumnSeries()
            .withStrokeStyle(-0xdcdcdd, 0.4f)
            .withDataPointWidth(0.5)
            .withDataSeries(dataSeries)
            .withPaletteProvider(ColumnsPaletteProvider())
            .build()
}

private fun createXandYAxis() {
    xAxis = sciChartBuilder.newNumericAxis()
            .withGrowBy(0.2, 0.2)
            .withLabelProvider(YearsLabelProvider())
            .build()
    yAxis = sciChartBuilder.newNumericAxis()
            .withAutoRangeMode(AutoRange.Always).build()
    Collections.addAll(lineChart.xAxes, xAxis)
    Collections.addAll(lineChart.yAxes, yAxis)
}
  • Пример 1: DataSet (A = 50, B = 60, C = 20), эти значения отображаются правильно

  • Пример 2: DataSet (A = 80, B = 60, C = 20) A увеличено с 50 до 80 в этом наборе данных: эти значения также отображаются правильно .

  • Пример 3. Уведомление DataSet (A = 14, B = 60, C = 20). Уведомление A уменьшено с 80 до 14, график не обновлен, и старое значение A = 80 отображается

Обновление Значения диаграммы столбца обновляются в слушателе кольцевой диаграммы

segments.forEach(Consumer { segment: PieSegment ->
        segment.addIsSelectedChangeListener {
            var chartData  = dataCollector(it.value.toLong())
            vehicleData[0] = chartData.fuels
            vehicleData[1] = chartData.repairs
            vehicleData[2] = chartData.tolls
            vehicleData[3] = chartData.mis

            rSeries = createRSeries(vehicleData)
            drawColumnChart()

        }
    })

Спасибо за чтение:)

1 Ответ

2 голосов
/ 30 марта 2020

Проблема в вашем коде состоит в том, что вы добавляете новую серию столбцов поверх старой, потому что RenderableCollection не очищается до добавления новой серии столбцов. Я бы предложил добавить вызов clear () для коллекции визуализируемых серий в drawColumnChart ().

private fun drawColumnChart() {
    UpdateSuspender.using(lineChart) {
        animator?.cancel() // cancel if there is animation in progress

        lineChart.renderableSeries.clear()
        Collections.addAll(lineChart.renderableSeries, rSeries)

        animator = sciChartBuilder.newAnimator(rSeries)
                    .withWaveTransformation()
                    .withInterpolator(DecelerateInterpolator())
                    .withDuration(3000)
                    .withStartDelay(350).build()

        animator.start()
    }
}

Также я бы предложил установить тему и модификаторы один раз, потому что если вы оставите этот код в drawColumnChart () вам также нужно очистить коллекцию модификаторов + вы будете сбрасывать тему каждый раз при перерисовке столбца:

private fun createXandYAxis() {
    xAxis = sciChartBuilder.newNumericAxis()
        .withGrowBy(0.2, 0.2)
        .withLabelProvider(YearsLabelProvider())
        .build()
    yAxis = sciChartBuilder.newNumericAxis()
        .withAutoRangeMode(AutoRange.Always).build()

    UpdateSuspender.using(lineChart) {
        lineChart.theme = R.style.SciChart_Bright_Spark

        Collections.addAll(lineChart.xAxes, xAxis)
        Collections.addAll(lineChart.yAxes, yAxis)
        Collections.addAll(lineChart.chartModifiers, sciChartBuilder
            .newModifierGroupWithDefaultModifiers().build())
    }

}
...