TextView как индикатор выполнения в Kotlin - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь скопировать 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()
  }
}

Что мне не хватает? Мне удалось заставить его рисовать прямоугольник, а не вырезать в первой половине, но мне все еще любопытно, как это должно быть сделано «правильно», так как это решение кажется более элегантным.

...