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