Назовите отличия invalidate() от requestLayout()

requestLayout() и invalidate() — два метода, которые используются чтобы обновить View после его изменения. Но используются они для разных вещей.

invalidate() это метод, который при вызове гарантирует что в когда-то в будущем (довольно скоро после вызова invalidate(), но не сразу) будет вызван метод onDraw(). То есть этот метод нужен чтобы запланировать (добавить в очередь) перерисовку View.

После вызова requestLayout() когда-то в будущем будут вызваны методы onMeasure() и onLayout() у данной View, а также у всех ее родителей. При этом вызов метода requestLayout() не гарантирует вызов onDraw().

Таким образом, invalidate() нужен чтобы перерисовать View, а requestLayout(), чтобы заново оценить размеры View. Обычно эти два метода используются вместе, но invalidate() можно использовать отдельно, когда точно известно что размеры View никак не меняются.

Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *