Ответ
requestLayout() пересчитывает размеры и позиции View (measure/layout), затем вызывает перерисовку (draw). Используется, когда изменились параметры, влияющие на размер или положение (например, изменился текст или padding).
invalidate() только помечает область View как "грязную" и вызывает перерисовку (draw) без пересчета layout. Используется, когда изменилось только содержимое (например, цвет или анимация).
Пример:
// Изменили текст - нужно обновить размеры
textView.text = "New text"
textView.requestLayout()
// Просто изменили цвет - достаточно перерисовать
view.setBackgroundColor(Color.RED)
view.invalidate()