Да, знаком.
Жизненный цикл View состоит из нескольких ключевых этапов:
measure(int widthMeasureSpec, int heightMeasureSpec): Выполняет измерение.onMeasure(int widthMeasureSpec, int heightMeasureSpec): Переопределяется для реализации логики измерения.layout(int l, int t, int r, int b): Выставляет позицию.onLayout(boolean changed, int l, int t, int r, int b): Переопределяется для реализации логики размещения.draw(Canvas canvas): Выполняет прорисовку.onDraw(Canvas canvas): Переопределяется для реализации логики прорисовки.onAttachedToWindow(): Вызывается при присоединении.onDetachedFromWindow(): Вызывается при отсоединении.В процессе жизненного цикла могут происходить запросы на переизмерение (requestLayout()) или перерисовку (invalidate()), что приводит к повторному выполнению соответствующих этапов.
Для кастомных View чаще всего переопределяются методы onMeasure, onLayout и onDraw.
Таблица ключевых методов:
| Этап | Метод для измерения | Метод для размещения | Метод для прорисовки | Метод для аттач/деттач |
|---|---|---|---|---|
| Процесс | measure() | layout() | draw() | |
| Переопределение | onMeasure() | onLayout() | onDraw() | onAttachedToWindow(), onDetachedFromWindow() |
Пример переопределения onMeasure в кастомной View:
java