Я пытаюсь скопировать TextView как индикатор выполнения, описанный в этом вопросе , используя Kotlin, переопределяя класс TextView и используя трюк отсечения холста в комментарии Зелони. Код почти работает: я вижу текст, изменяющий цвет с указанным процентом (фиксированный, на данный момент), но фон остается тем же (желтый, последний цвет фона, который я установил). Вот мой код:
class ProgressTextView(context: Context): TextView(context) {
override fun onDraw(canvas: Canvas) {
val color1 = ContextCompat.getColor(context, R.color.primaryColor)
val color2 = ContextCompat.getColor(context, R.color.secondaryColor)
var percent = 0.3 // Fixed progress % at 30%, for testing
// first half
canvas.save()
setTextColor(Color.RED)
setBackgroundColor(Color.GREEN)
canvas.clipRect(Rect(0, 0, (width * percent).toInt(), height))
super.onDraw(canvas)
canvas.restore()
// second half
canvas.save()
setTextColor(Color.BLACK)
setBackgroundColor(Color.YELLOW)
canvas.clipRect(Rect((width * percent).toInt(), 0, width, height))
super.onDraw(canvas)
canvas.restore()
}
}
Что мне не хватает? Мне удалось заставить его рисовать прямоугольник, а не вырезать в первой половине, но мне все еще любопытно, как это должно быть сделано «правильно», так как это решение кажется более элегантным.