MPAndroidChart正确使用getPixelForValues为图表添加渐变色

MPAndroidChart正确使用getPixelForValues为图表添加渐变色,android,mpandroidchart,linear-gradients,Android,Mpandroidchart,Linear Gradients,我试图根据y值设置折线图的颜色渐变。计划是做一个梯度,只覆盖整个东西一次 override fun createChartGradient(myEntities: List<MyEntity>, chart: LineChart): LinearGradient { val transformer = Transformer(chart.viewPortHandler) val entries: List<Entry> = createE

我试图根据
y
值设置
折线图的颜色渐变。计划是做一个梯度,只覆盖整个东西一次

   override fun createChartGradient(myEntities: List<MyEntity>, chart: LineChart): LinearGradient {
       val transformer = Transformer(chart.viewPortHandler)
       val entries: List<Entry> = createEntriesFrom(myEntities) // this works fine, the chart is plotted alright
       val pixelXValues = entries.map { transformer.getPixelForValues(it.x, it.y).x.toFloat() }.toFloatArray()
       val colors = calculateColorsBasedOnValues(myEntities) // this works fine, I can set the fill color of points with this. 
       return LinearGradient(pixelXValues.first(), 0f, pixelXValues.last(), 0f, colors.toIntArray(), pixelXValues.lerp(), Shader.TileMode.REPEAT)
   }

   private fun FloatArray.lerp(): FloatArray {
       val total = this.last() - this.first()
       return this.map { ((it - this.first()) / total) }.toFloatArray()
   }
我很清楚,我必须在放大或缩小时更新这个,但现在我很难让它在完全缩小的情况下工作,在这种情况下,图表似乎会重复着色器5次-但根据我的计算,我应该只覆盖整个事件一次

我附加了一个调试器,
lerp
函数的输出是0到1,包括0到1

使用
getPixelForValues
LinearGradient
有什么不对

    val gradient = lineChartService.createChartGradient(entities, chart)
    chart.renderer.paintRender.shader = gradient