Я создал пользовательский вид Android с помощью Kotlin, чтобы нарисовать звезду, которая будет использоваться для создания пользовательского RatingBar в будущем;Поэтому я расширил класс View и переопределил его метод draw()
, чтобы нарисовать одну звезду, учитывая это руководство от Google: https://developer.android.com/training/custom-views/custom-drawing
После этого я попытался заполнить траекторию звезды линейным градиентом, чтобы добиться ее заполнения.эффект, следующий за этим сообщением: Как заполнить контур в Android линейным градиентом?
class CustomStar constructor(context: Context, attr: AttributeSet) : View(context, attr) {
private var paint: Paint = Paint(Paint.FILTER_BITMAP_FLAG)
private var path: Path = Path()
init {
paint.shader = LinearGradient(0f, 0f, 0f, height.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
}
override fun draw(canvas: Canvas?) {
super.draw(canvas)
// draw the star.
val min = Math.min(width, height).toFloat()
// top left
path.moveTo(0f, min * 0.3819901313f)
// top right
path.lineTo(min, min * 0.3819901313f)
// bottom left
path.lineTo(min * 0.1910982479f, min)
// top tip
path.lineTo(min * 0.5f, 0f)
// bottom right
path.lineTo(min*0.8089799735f, min)
// top left
path.lineTo(0f, min * 0.3819901313f)
path.close()
canvas?.drawPath(path, paint)
}
}
Как вы можете видеть в init
, атрибут shader
объекта рисования установлендо LinearGradient(0f, 0f, 0f, height.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
, поэтому я должен ожидать, что форма будет заполнена градиентом.
Но проблема в том, что я получаю только сплошную звезду, заполненную вместо градиента, как показано на фотографии:
Теперь вопрос, почему я получаю сплошной цвет вместо градиента на звезде?
Спасибо за ваше внимание.