Назад к вопросам
Middle
68
questionbank

Расскажи о методах, которые перерисовывают View.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Методы:

  • invalidate(): Помечает View как "грязное", требующее перерисовки. Планирует выполнение onDraw() в будущем. Перерисовка происходит в основном потоке. Используется, если изменились внешние свойства View (цвет, фон и т.д.).
  • postInvalidate(): Аналогично invalidate(), но может быть вызван из любого потока, а не только из основного. Безопасно для использования в фоновых потоках.
  • requestLayout(): Помечает View как "недействительное", требующее перерасчета его размера и положения. Планирует выполнение onMeasure() и onLayout(), а затем onDraw(). Используется, если изменились размеры или положение View (например, при добавлении/удалении дочерних элементов в ViewGroup).

Сравнение методов:

Метод Поток вызова Перерасчет layout Перерисовка
invalidate() UI поток Нет Да
postInvalidate() Любой поток Нет Да
requestLayout() UI поток Да Да (после layout)

Пример использования invalidate():

// Изменение цвета View и требование перерисовки
myView.setBackgroundColor(Color.RED)
myView.invalidate()

Пример использования requestLayout():

// Добавление дочернего элемента в LinearLayout и требование перерасчета layout и перерисовки
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()