Назовите отличия invalidate() от requestLayout()
requestLayout() и invalidate() — два метода, которые используются чтобы обновить View после его изменения. Но используются они для разных вещей.
invalidate() это метод, который при вызове гарантирует что в когда-то в будущем (довольно скоро после вызова invalidate(), но не сразу) будет вызван метод onDraw(). То есть этот метод нужен чтобы запланировать (добавить в очередь) перерисовку View.
После вызова requestLayout() когда-то в будущем будут вызваны методы onMeasure() и onLayout() у данной View, а также у всех ее родителей. При этом вызов метода requestLayout() не гарантирует вызов onDraw().
Таким образом, invalidate() нужен чтобы перерисовать View, а requestLayout(), чтобы заново оценить размеры View. Обычно эти два метода используются вместе, но invalidate() можно использовать отдельно, когда точно известно что размеры View никак не меняются.
Учитесь как в игре
Обучающая платформа AndroidSprint
Уровни, XP, достижения и рейтинги. Увидите прогресс каждый день — мотивация не пропадает даже через месяцы обучения
- Геймификация: уровни, опыт, достижения — как в игре, но навыки реальные
- Карта навыков: визуальный прогресс по каждой технологии — видите, что освоили
- Рейтинги: сравнивайте себя с другими студентами — здоровая конкуренция