如何在Android自定义视图中使用线性渐变填充路径

如何在Android自定义视图中使用线性渐变填充路径,android,graphics,kotlin,android-custom-view,linear-gradients,Android,Graphics,Kotlin,Android Custom View,Linear Gradients,我已经创建了一个Android自定义视图,使用Kotlin绘制了一个星星,该星星将来将用于创建自定义分级栏;因此,我扩展了View类,并覆盖了它的draw()方法来绘制一颗星,考虑到Google提供的以下指南: 之后,我尝试用线性渐变填充星形路径,以实现以下帖子中的星形填充效果: 正如您在init中所看到的,绘制对象的着色器属性设置为LinearGradient(0f,0f,0f,height.toFloat(),Color.YELLOW,Color.WHITE,shader.TileMod

我已经创建了一个Android自定义视图,使用Kotlin绘制了一个星星,该星星将来将用于创建自定义分级栏;因此,我扩展了View类,并覆盖了它的
draw()
方法来绘制一颗星,考虑到Google提供的以下指南:

之后,我尝试用线性渐变填充星形路径,以实现以下帖子中的星形填充效果:

正如您在
init
中所看到的,绘制对象的
着色器
属性设置为
LinearGradient(0f,0f,0f,height.toFloat(),Color.YELLOW,Color.WHITE,shader.TileMode.MIRROR)
,因此我希望形状填充渐变

但问题是我只得到了一个实心的恒星,而不是梯度,如图所示:

现在的问题是,为什么我得到的是恒星的纯色而不是渐变色


感谢您的关注。

此时视图的高度未知:

init {
    paint.shader = LinearGradient(0f, 0f, 0f, height.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
}
而是覆盖onSizeChanged并在其中创建LinearGradient:

override fun onSizeChanged(w: Int, h: Int, oldW: Int, oldH: Int) {
    paint.shader = LinearGradient(0f, 0f, 0f, h.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
}

这回答了你的问题吗?
override fun onSizeChanged(w: Int, h: Int, oldW: Int, oldH: Int) {
    paint.shader = LinearGradient(0f, 0f, 0f, h.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
}