Урок 4. Android Material Design. Установка теней и обрезка View

Перевод документации официального сайта developer.android.com

<<<Предыдущий урок

Material design вводит понятие высоты для элементов пользовательского интерфейса. Высота помогает пользователям понять относительную важность каждого элемента и сосредоточить свое внимание на задаче.

Высота view представленная с помощью оси Z, определяет внешний вид его тени: view с более высоким значением Z отбрасывают большие, более мягкие тени. View с высшим значением Z перекрывают view с низшим значением Z; однако, значение Z не влияет на размер самого view.

Высота также полезна для создания анимаций, когда виджеты временно поднимаются выше плоскости view при выполнении какого-либо действия.

Для получения дополнительной информации о высоте в материальном дизайне, смотрите Объекты в 3D пространстве.

Установите высоту ваших View

Значение Z для view состоит из двух составляющих:

– Высота (elevation): статическая составляющая.
– Смещение (translation): динамическая составляющая,  используемая для анимаций.

Z = elevation + translationZ

shadows-depth
Рисунок 1. Тени для различных высот view.

 

Чтобы установить высоту view в макете используйте атрибут android:elevation. Чтобы установить высоту в коде activity, используйте метод View.setElevation().

Чтобы установить смещение, используйте метод View.setTranslationZ().

Новые методы ViewPropertyAnimator.z() и ViewPropertyAnimator.translationZ() позволяют легко анимировать высоту view. Для получения дополнительной информации, смотрите справку по ViewPropertyAnimator и руководство разработчика о свойствах анимации.

Вы так же можете использовать StateListAnimator чтобы установить анимации декларативно. Это особенно полезно в тех случаях, когда изменяется состояние триггера анимации, например, когда пользователь нажимает на кнопку. Для получения дополнительной информации, смотрите Изменение состояния анимации view.

Значение Z измеряется в dp (density-independent pixels).

Настройте тени и контуры

Границы фона drawable view определяют форму его тени. Контуры представляют собой внешнюю форму графического объекта и определяют область для сенсорного отклика.

Рассмотрим view, определенное с помощью фона dravable:

<TextView
android:id="@+id/myview"
...
android:elevation="2dp"
android:background="@drawable/myrect" />

Фон drawable определен как прямоугольник с закругленными углами:

<!-- res/drawable/myrect.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#42000000" />
<corners android:radius="5dp" />
</shape>

View отбрасывает тень с закругленными углами, после того как фон drawable установил границы view. Создание пользовательского контура переопределяет форму тени view по умолчанию.

Чтобы установить пользовательский контур для view в коде:

1. Унаследуйтесь от класса ViewOutlineProvider.
2. Переопределите метод getOutline().
3. Назначьте нового поставщика контура для вашего view с помощью метода View.setOutlineProvider() .

Вы можете создать овальные и прямоугольные очертания с закругленными углами используя методы класса Outlines. Поставщик контура для view по умолчанию получает контур из фона view. Чтобы view не отбрасывала тень, установите значение поставщика контура в null.

Обрежьте view

Обрезание позволяет вам легко изменить форму view. Вы можете обрезать view для совместимости с другими элементами дизайна или изменить форму view в ответ на действия пользователя. Вы можете обрезать view к его области контура с помощью метода View.setClipToOutline() или используя атрибут android:clipToOutline. Только прямоугольник, круг и скругленный прямоугольник поддерживают обрезание, как определено в методе Outline.canClip().

Чтобы обрезать view в форме drawable, установите drawable в качестве фона view (как показано выше), и вызовите метод View.setClipToOutline().

Обрезание view это дорогостоящая операция, поэтому не анимируйте форму,  которую вы используете чтобы обрезать view. Для достижения этого эффекта используйте Reveal эффект анимации.

 

Продолжение следует

 

Эта статья является переводом. Ссылка на источник.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License

 

Надеемся, вам понравился материал. Возможно, вашим друзьям тоже будет интересно, поделитесь с ними!

Коментарі: 3
Додати коментар