Урок 5. Android Material Design. Работа с Drawables

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

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

Работа с Drawables

Drawable – это обобщающая абстракция для “чего-то, что можно нарисовать”. Наиболее часто вы будете иметь дело с Drawable как типом ресурса, получаемым для рисования чего-нибудь на экране; Drawable класс предоставляет общий интерфейс для работы с визуальными ресурсами, который может принимать различные формы. В отличие от ViewDrawable не имеет никаких средств для обработки событий или иного взаимодействия с пользователем.

Следующие возможности drawables помогут вам реализовать материальный дизайн в своих приложениях:

  • Тонирование drawable
  • Рельефное цветовое выделение
  • Векторные drawables

В этом уроке вы узнаете, как использовать эти функции в вашем приложении.

Тонируйте ресурсы Drawable

Версии Android 5.0 (API 21) и выше поддерживают тонирование растровых изображений и 9-patch, определенных как альфа маски. Вы можете окрасить их с помощью цветных ресурсов или атрибутами темы, которые разрешают окрашивать ресурсы (например, android:attr/colorPrimary). Обычно вы создаете их только один раз и окрашиваете их автоматически, чтобы привести в соответствие вашей теме.

Вы можете применить тонирование к объектам BitmapDrawable или NinePatchDrawable с помощью метода setTint(). Вы также можете установить цвет и форму тонирования в ваших макетах с помощью атрибутов android:tint и android:tintMode.

Извлеките рельефные цвета из изображений

Вспомогательные библиотеки Android Support Library r21 и выше включают класс Palette, который позволяет вам извлекать рельефные цвета из изображения. Этот класс извлекает следующие цвета:

  • Vibrant
  • Vibrant dark
  • Vibrant light
  • Muted
  • Muted dark
  • Muted light

Чтобы извлечь эти цвета, передайте растровый объект в статический метод Palette.generate() в фоновом потоке, в котором вы загрузите ваши изображения. Если вы не можете использовать данный поток, вызовите метод Palette.generateAsync().

Вы можете получить цвета из изображения, используя геттеры в классе Palette, такие как Palette.getVibrantColor.

Чтобы использовать класс Palette в вашем проекте, добавьте следующую Graddle зависимость к своему приложению:

dependencies {
    ...
    compile 'com.android.support:palette-v7:21.0.+'
}

Для получения дополнительной информации посмотрите справку по API для класса Palette.

Создайте векторные Drawables

В Android 5.0 (API 21) и выше вы можете установить векторные drawables, которые масштабируется без потерь четкости. Вам нужен только один файл ресурсов для векторного изображения, в отличии от файла ресурсов для каждой плотности экрана в случае растровых изображений. Чтобы создать векторное изображение, укажите детали формы в элементе XML <vector> .

Следующий пример устанавливает векторное изображение в форме сердца:

<!-- res/drawable/heart.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    <!-- intrinsic size of the drawable -->
    android:height="256dp"
    android:width="256dp"
    <!-- size of the virtual canvas -->
    android:viewportWidth="32"
    android:viewportHeight="32">

  <!-- draw a path -->
  <path android:fillColor="#8fff"
      android:pathData="M20.5,9.5
                        c-1.955,0,-3.83,1.268,-4.5,3
                        c-0.67,-1.732,-2.547,-3,-4.5,-3
                        C8.957,9.5,7,11.432,7,14
                        c0,3.53,3.793,6.257,9,11.5
                        c5.207,-5.242,9,-7.97,9,-11.5
                        C25,11.432,23.043,9.5,20.5,9.5z" />
</vector>

Векторные изображения представлены в Android как объекты VectorDrawable. Для получения дополнительной информации о синтаксисе pathData, смотрите справку SVG Path. Для получения дополнительной информации об свойствах анимации вектора drawables, смотрите анимирование вектора drawables.

 

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

 

Эта статья является переводом. Ссылка на источник.
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

 

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

Додати коментар