Android 如果列值减少,则列图表不更新

Android 如果列值减少,则列图表不更新,android,scichart,Android,Scichart,如果柱形图中的值增加,柱形图将更新,并且一切看起来都很好。但当值减少时,列不会更新,并且仍显示旧值 private fun drawColumnChart() { UpdateSuspender.using(lineChart) { lineChart.theme = R.style.SciChart_Bright_Spark Collections.addAll(lineChart.renderableSeries, rSeries) C

如果柱形图中的值增加,柱形图将更新,并且一切看起来都很好。但当值减少时,列不会更新,并且仍显示旧值

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)
}

感谢阅读:)

代码中的问题是在旧列系列的基础上添加新列系列,因为在添加新列系列之前不会清除RenderableCollection。我建议在drawColumnChart()中添加对renderable series集合的clear()调用

另外,我建议只设置一次主题和修饰符,因为如果您将该代码保留在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())
    }

}

您能否提供一个重现此问题的数据集或完整代码的示例,因为我不确定增加/减少列值是什么意思?你能澄清这一部分吗?@YuraKhariton用数据集的例子更新了这个问题。我不确定我是否理解你是如何更新列值的。是否为每个数据集创建新的colum系列?我正在查看您的代码,只有append()调用将新点添加到数据系列的末尾。现在,您的数据库中有update()调用example@YuraKhariton更新了问题。我在甜甜圈图表的侦听器中更新列图表值。如示例1和示例2所示,由于值在增加,因此效果良好。但是示例3没有,因为值在减小。我实现了上面的代码。第一次呈现柱形图。使用不同的值再次渲染时,NPE java.lang.NullPointerException失败:尝试在com.scichart.charting.visuals.renderableSeries.data.xseriesUnderPassData.isValid()上的空对象引用上调用虚拟方法“boolean com.scichart.charting.visuals.animations.WaveTransformationBase.onAnimationStart”(SourceFile:106)这可能是由于从系列集合中删除了系列的未完成动画造成的。这意味着您需要将Animator存储在某个位置,然后再删除系列取消动画。
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()
    }
}
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())
    }

}