Mastering Shadows in Android - хорошая вводная статья в Material Design и создание интерфейсов, имеющих глубину. Основные моменты:
- Material Design отличается от других языков дизайна тем, что активно использует концепцию глубины. Разные уровни глубины олицетворяют собой важность графических элементов: если на столе лежат несколько бумаг, наиболее важной из них будет та, что сверху.
- Порядок расположения элементов определяется Z-значением, которое в свою очередь состоит из двух компонентов: высота (elevation) и translation Z. Первый статичен, второй может меняться и обычно используется для анимации. Пример: по умолчанию FloatingActionButton (круглая кнопка внизу экрана) имеет высоту 6dp, но при нажатии значение translation Z меняется с 0 до 6dp, так что в результате высота становится 12dp и кнопка "поднимается" над экраном.
- В зависимости от того на какой высоте находятся элементы, они будут иметь разные тени. Для формирования теней используется два виртуальных источника света. Один находится над верхней частью экрана и повернут к нему под углом (так что тени от элементов будут находиться снизу), второй направлен прямо на экран под прямым углом (он создает мягкую тень вокруг элемента).
- Для формирования теней фреймворк Android использует контур (outline) графического элемента (view). Но если ты создашь собственный View с динамически изменяемым размером - контура у него не будет и Android не сможет создать тень. Для решения этой проблемы необходимо использовать ViewOutlineProvider.
- Material Design отличается от других языков дизайна тем, что активно использует концепцию глубины. Разные уровни глубины олицетворяют собой важность графических элементов: если на столе лежат несколько бумаг, наиболее важной из них будет та, что сверху.
- Порядок расположения элементов определяется Z-значением, которое в свою очередь состоит из двух компонентов: высота (elevation) и translation Z. Первый статичен, второй может меняться и обычно используется для анимации. Пример: по умолчанию FloatingActionButton (круглая кнопка внизу экрана) имеет высоту 6dp, но при нажатии значение translation Z меняется с 0 до 6dp, так что в результате высота становится 12dp и кнопка "поднимается" над экраном.
- В зависимости от того на какой высоте находятся элементы, они будут иметь разные тени. Для формирования теней используется два виртуальных источника света. Один находится над верхней частью экрана и повернут к нему под углом (так что тени от элементов будут находиться снизу), второй направлен прямо на экран под прямым углом (он создает мягкую тень вокруг элемента).
- Для формирования теней фреймворк Android использует контур (outline) графического элемента (view). Но если ты создашь собственный View с динамически изменяемым размером - контура у него не будет и Android не сможет создать тень. Для решения этой проблемы необходимо использовать ViewOutlineProvider.