Прорисовываемый ресурс – это общее понятие для графического элемента, который можно нарисовать на экране и получить с помощью API, например getDrawable(int), или применить к другому ресурсу XML с помощью таких атрибутов, как android:drawable и android:icon.
Существует несколько типов графических объектов:
- Битовая карта
-
- Растровый графический файл (PNG, WEBP, JPG или GIF).
Создает
BitmapDrawable.
- Файл 9-patch
- Файл PNG с растягиваемыми областями, позволяющими изменять размер изображений в зависимости от контента (
.9.png). Создает NinePatchDrawable.
- Список слоев
- Объект Drawable, который управляет массивом других объектов Drawable. Они рисуются в порядке массива, поэтому элемент с наибольшим индексом рисуется сверху. Создает
LayerDrawable.
- Список штатов
- XML-файл, который ссылается на разные растровые изображения для разных состояний, например для использования другого изображения при нажатии кнопки.
Создает
StateListDrawable.
- Список уровней
- XML-файл, который определяет графический объект, управляющий несколькими альтернативными графическими объектами, каждому из которых присвоено максимальное числовое значение. Создает
LevelListDrawable.
- Transition drawable
- XML-файл, определяющий прорисовываемый ресурс, который может плавно переходить в другой прорисовываемый ресурс.
Создает
TransitionDrawable.
- Внутренний графический объект
- XML-файл, который определяет графический объект, вставляющий другой графический объект на указанное расстояние.
Это полезно, когда для представления требуется фоновый графический объект, который меньше фактических границ представления.
- Обрезка графического объекта
- XML-файл, определяющий графический объект, который обрезает другой графический объект на основе текущего значения уровня этого объекта. Создает
ClipDrawable.
- Масштабируемый графический объект
- XML-файл, определяющий графический объект, который изменяет размер другого графического объекта на основе его текущего значения уровня. Создает
ScaleDrawable
- Графический объект Shape.
- XML-файл, определяющий геометрическую фигуру, включая цвета и градиенты.
Создает
GradientDrawable.
Информацию о том, как создать AnimationDrawable, можно найти в документе Ресурсы анимации.
Примечание. Ресурс цвета также можно использовать в качестве графического объекта в XML. Например, при создании объекта Drawable со списком состояний вы можете указать ресурс цвета для атрибута android:drawable (android:drawable="@color/green").
Битовая карта
Растровое изображение. Android поддерживает файлы растровых изображений в следующих форматах: PNG (предпочтительно), WEBP (предпочтительно, требуется API уровня 17 или выше), JPG (допустимо), GIF (не рекомендуется).
Вы можете ссылаться на файл битового изображения напрямую, используя название файла в качестве идентификатора ресурса, или создать псевдоним идентификатора ресурса в XML.
Примечание. Растровые файлы могут быть автоматически оптимизированы с помощью сжатия изображений без потерь инструментом aapt в процессе сборки. Например, полноцветный PNG, в котором используется не более 256 цветов, можно преобразовать в 8-битный PNG с палитрой. В результате получается изображение того же качества, но меньшего размера.
Поэтому имейте в виду, что двоичные файлы изображений, помещенные в этот каталог, могут измениться во время сборки. Если вы планируете считывать изображение как поток битов, чтобы преобразовать его в битовую карту, поместите изображения в папку res/raw/, где они не оптимизируются.
Растровый файл
Битовая карта – это файл PNG, WEBP, JPG или GIF. Android создает ресурс Drawable для любого из этих файлов, когда вы сохраняете их в каталоге res/drawable/.
- местоположение файла;
res/drawable/filename.png (.png, .webp, .jpg или .gif)
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
BitmapDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- пример:
- Если изображение сохранено в папке
res/drawable/myimage.png, этот XML-код макета применяет изображение к представлению:
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/myimage" />
Следующий код приложения извлекает изображение в виде Drawable:
Kotlin
val drawable: Drawable? = ResourcesCompat.getDrawable(resources, R.drawable.myimage, null)
- См. также:
-
XML-файл растрового изображения
XML-файл растрового изображения – это ресурс, определенный в XML, который указывает на растровый файл. Эффект – это псевдоним для необработанного растрового файла. В XML-файле можно указать дополнительные свойства растрового изображения, например размытие и мозаику.
Примечание. Элемент <bitmap> можно использовать как дочерний элемент <item>. Например, при создании списка состояний или списка слоев можно исключить атрибут android:drawable из элемента <item> и вложить в него элемент <bitmap>, определяющий графический объект.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
BitmapDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:antialias=["true" | "false"]
android:dither=["true" | "false"]
android:filter=["true" | "false"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:mipMap=["true" | "false"]
android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
- elements:
-
<bitmap>
- Обязательный атрибут. Определяет источник растрового изображения и его свойства.
Атрибуты:
xmlns:android
- Строка. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android". Это свойство обязательно, только если <bitmap> является корневым элементом. Оно не требуется, если свойство <bitmap> вложено в свойство <item>.
android:src
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на прорисовываемый ресурс.
android:antialias
- Логическое значение. Включает или отключает сглаживание.
android:dither
- Логическое значение. Включает или отключает размытие битового изображения, если его пиксельная конфигурация не совпадает с конфигурацией экрана (например, битовое изображение ARGB 8888 на экране RGB 565).
android:filter
- Логическое значение. Включает или отключает фильтрацию растровых изображений. Фильтрация используется, когда битовая карта сжимается или растягивается, чтобы сгладить ее внешний вид.
android:gravity
- Ключевое слово. Определяет гравитацию для растрового изображения. Параметр gravity указывает, где разместить графический объект в контейнере, если битовая карта меньше контейнера.
Должно быть одно или несколько из следующих постоянных значений, разделенных символом |:
| Значение | Описание |
top |
Поместить объект в верхнюю часть контейнера, не меняя его размер. |
bottom |
Поместить объект в нижнюю часть контейнера, не меняя его размер. |
left |
Поместить объект у левого края контейнера, не меняя его размер. |
right |
Поместить объект у правого края контейнера, не меняя его размер. |
center_vertical |
Разместить объект по центру контейнера по вертикали, не меняя его размер. |
fill_vertical |
При необходимости увеличьте размер объекта по вертикали, чтобы он полностью заполнил контейнер. |
center_horizontal |
Разместить объект по центру контейнера по горизонтали, не меняя его размер. |
fill_horizontal |
При необходимости увеличьте размер объекта по горизонтали, чтобы он полностью заполнил контейнер.
|
center |
Объект размещается в центре контейнера по вертикальной и горизонтальной осям без изменения размера. |
fill |
При необходимости увеличьте размер объекта по горизонтали и вертикали, чтобы он полностью заполнил контейнер. Это значение используется по умолчанию. |
clip_vertical |
Дополнительный параметр, который можно настроить так, чтобы верхний и/или нижний края дочернего элемента были обрезаны по границам его контейнера. Обрезка выполняется по вертикали: при привязке к верхнему краю обрезается нижний край, при привязке к нижнему краю – верхний край, а если привязка не задана, обрезаются оба края.
|
clip_horizontal |
Дополнительный параметр, который можно задать, чтобы левый и/или правый края дочернего элемента были обрезаны по границам его контейнера. Обрезка выполняется по горизонтали: при левом выравнивании обрезается правый край, при правом – левый, а при отсутствии выравнивания – оба края.
|
android:mipMap
- Логическое значение. Включает или отключает подсказку mipmap. Подробнее:
setHasMipMap().
Значение по умолчанию – false.
android:tileMode
- Ключевое слово. Определяет режим мозаики. Если включен режим мозаики, растровое изображение повторяется. Если включен режим мозаики, гравитация игнорируется.
Допустимые значения:
| Значение | Описание |
disabled |
Не разбивать растровое изображение на фрагменты. Это значение по умолчанию. |
clamp |
Повторять цвет края, если шейдер выходит за исходные границы. |
repeat |
Повторять изображение шейдера по горизонтали и вертикали. |
mirror |
Повторять изображение шейдера по горизонтали и вертикали, чередуя зеркальные изображения, чтобы соседние изображения всегда соприкасались. |
- пример:
-
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/icon"
android:tileMode="repeat" />
- См. также:
-
Nine-patch
NinePatch – это изображение в формате PNG, в котором можно определить растягиваемые области. Android масштабирует их, когда контент в представлении выходит за обычные границы изображения. Обычно такие изображения используются в качестве фона для представлений, у которых хотя бы один размер задан как "wrap_content".
Когда представление увеличивается, чтобы вместить контент, изображение Nine-Patch также масштабируется в соответствии с размером представления. Примером использования изображения Nine-Patch является фон, используемый стандартным виджетом Button Android, который должен растягиваться, чтобы вместить текст (или изображение) внутри кнопки.
Как и в случае с обычной битовой картой, вы можете ссылаться на файл Nine-Patch напрямую или из ресурса, определенного XML.
Подробную информацию о том, как создать файл 9-patch с растягиваемыми областями, можно найти в статье Создание масштабируемых растровых изображений (файлы 9-patch).
Файл Nine-patch
- местоположение файла;
res/drawable/filename.9.png
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
NinePatchDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- пример:
- Если изображение сохранено в папке
res/drawable/myninepatch.9.png, то этот XML-код макета применяет изображение Nine-Patch к представлению:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/myninepatch" />
- См. также:
-
XML-файл Nine-Patch
XML-файл Nine-Patch – это ресурс, определенный в XML, который указывает на файл Nine-Patch. В XML-файле можно указать размытие для изображения.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
NinePatchDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:dither=["true" | "false"] />
- elements:
-
<nine-patch>
- Обязательный атрибут. Определяет источник Nine-patch и его свойства.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
android:src
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на файл nine-patch.
android:dither
- Логическое значение. Включает или отключает размытие битового изображения, если его пиксельная конфигурация не совпадает с конфигурацией экрана (например, битовое изображение ARGB 8888 на экране RGB 565).
- пример:
-
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/myninepatch"
android:dither="false" />
Список слоев
LayerDrawable – это графический объект, который управляет массивом других графических объектов. Каждый объект в списке рисуется в порядке, указанном в списке. Последний объект в списке рисуется поверх остальных.
Каждый графический объект представлен элементом <item> внутри одного элемента <layer-list>.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
LayerDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</layer-list>
- elements:
-
<layer-list>
- Обязательный атрибут. Это должен быть корневой элемент. Содержит один или несколько элементов
<item>.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
<item>
- Определяет графический объект, который нужно поместить в слой, в позиции, заданной его атрибутами.
Должен быть дочерним элементом
<layer-list>. Принимает дочерние элементы <bitmap>.
Атрибуты:
android:drawable
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на прорисовываемый ресурс.
android:id
- Идентификатор ресурса. Уникальный идентификатор ресурса для этого графического объекта. Чтобы создать новый идентификатор ресурса для этого объекта, используйте форму
"@+id/name". Знак плюса указывает на то, что это новый идентификатор. С помощью этого идентификатора можно получить и изменить объект Drawable, используя View.findViewById() или Activity.findViewById().
android:top
- Параметр. Верхнее смещение в виде значения параметра или ресурса параметра.
android:right
- Параметр. Смещение справа в виде значения или ресурса.
android:bottom
- Параметр. Смещение снизу в виде значения или ресурса.
android:left
- Параметр. Смещение слева в виде значения или ресурса.
По умолчанию все графические объекты масштабируются в соответствии с размером содержащего их представления. Таким образом, размещение изображений в списке слоев в разных позициях может увеличить размер представления, а некоторые изображения масштабируются соответствующим образом.
Чтобы избежать масштабирования элементов в списке, используйте элемент <bitmap> внутри элемента <item>, чтобы указать графический объект и определить гравитацию для чего-то, что не масштабируется, например "center". Например, следующий код <item> определяет элемент, который масштабируется в соответствии с размером контейнера:
<item android:drawable="@drawable/image" />
Чтобы избежать масштабирования, в следующем примере используется элемент <bitmap> с центрированной гравитацией:
<item>
<bitmap android:src="@drawable/image"
android:gravity="center" />
</item>
- пример:
- XML-файл сохранен в
res/drawable/layers.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/android_red"
android:gravity="center" />
</item>
<item android:top="10dp" android:left="10dp">
<bitmap android:src="@drawable/android_green"
android:gravity="center" />
</item>
<item android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue"
android:gravity="center" />
</item>
</layer-list>
В этом примере используется вложенный элемент <bitmap>, чтобы определить прорисовываемый ресурс для каждого элемента с гравитацией "center". Это гарантирует, что ни одно из изображений не будет масштабировано по размеру контейнера из-за изменения размера, вызванного смещением изображений.
Этот XML-код макета применяет объект Drawable к представлению:
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/layers" />
В результате получается стопка изображений, смещенных относительно друг друга:
- См. также:
-
Список штатов
StateListDrawable – это графический объект, определенный в XML, который использует несколько изображений для представления одной и той же графики в зависимости от состояния объекта. Например, виджет Button может быть нажат, выбран или неактивен. С помощью списка состояний вы можете задать разные фоновые изображения для каждого состояния.
Список состояний описывается в XML-файле. Каждое изображение представлено элементом <item> внутри одного элемента <selector>. Каждый элемент <item> использует различные атрибуты для описания состояния, в котором он используется в качестве графического объекта для отрисовки.
При каждом изменении состояния список состояний просматривается сверху вниз, и используется первый элемент, соответствующий текущему состоянию. Выбор не основан на "наилучшем совпадении", а скорее на первом элементе, который соответствует минимальным критериям состояния.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
StateListDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true" | "false"]
android:dither=["true" | "false"]
android:variablePadding=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_hovered=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_activated=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
- elements:
-
<selector>
- Обязательный атрибут. Это должен быть корневой элемент. Содержит один или несколько элементов
<item>.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
android:constantSize
- Логическое значение. True, если сообщаемый внутренний размер объекта остается постоянным при изменении состояния (размер является максимальным для всех состояний); false, если размер зависит от текущего состояния. Значение по умолчанию – false.
android:dither
- Логическое значение. True, чтобы включить размытие битовой карты, если ее конфигурация пикселей не совпадает с конфигурацией экрана (например, битовая карта ARGB 8888 на экране RGB 565). False, чтобы отключить размытие. Значение по умолчанию – true.
android:variablePadding
- Логическое значение. True, если отступы графического объекта меняются в зависимости от выбранного текущего состояния; false, если отступы должны оставаться неизменными на основе максимального отступа для всех состояний. Чтобы включить эту функцию, вам нужно будет выполнять макет при изменении состояния, что часто не поддерживается. Значение по умолчанию – false.
<item>
- Определяет графический объект, который будет использоваться в определенных состояниях, описанных его атрибутами. Должен быть дочерним элементом
<selector>.
Атрибуты:
android:drawable
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на прорисовываемый ресурс.
android:state_pressed
- Логическое значение. True, если этот элемент используется при нажатии на объект, например кнопку. False, если этот элемент используется в состоянии по умолчанию, когда нажатия не происходит.
android:state_focused
- Логическое значение. True, если этот элемент используется, когда объект находится в фокусе ввода, например когда пользователь выбирает поле ввода текста; false, если этот элемент используется в состоянии по умолчанию, не в фокусе.
android:state_hovered
- Логическое значение. True, если этот элемент используется, когда курсор наведен на объект; false, если этот элемент используется в состоянии по умолчанию, когда курсор не наведен. Часто этот объект может быть тем же, что и для состояния focused.
Добавлено в API уровня 14.
android:state_selected
- Логическое значение. True, если этот элемент используется, когда объект выбран пользователем при навигации с помощью кнопок направления, например при навигации по списку с помощью d-pad; false, если этот элемент используется, когда объект не выбран.
Состояние "Выбрано" используется, когда состояния android:state_focused недостаточно, например когда фокус находится на списке и элемент в нем выбран с помощью d-pad.
android:state_checkable
- Логическое значение. True, если этот элемент используется, когда объект можно выбрать; false, если этот элемент используется, когда объект нельзя выбрать. Используется, только если объект может переключаться между выбираемым и невыбираемым виджетом.
android:state_checked
- Логическое значение. True, если этот элемент используется, когда объект выбран; false, если он используется, когда объект не выбран.
android:state_enabled
- Логическое значение. True, если этот элемент используется, когда объект включен, то есть может получать события касания или клика; false, если он используется, когда объект отключен.
android:state_activated
- Логическое значение. True, если этот элемент используется, когда объект активирован как постоянный выбор, например для выделения ранее выбранного элемента списка в постоянном представлении навигации; false, если он используется, когда объект не активирован.
Появился в API уровня 11.
android:state_window_focused
- Логическое значение. True, если этот элемент используется, когда окно приложения находится в фокусе, то есть приложение работает на переднем плане; false, если этот элемент используется, когда окно приложения не находится в фокусе, например, если панель уведомлений опущена или появляется диалоговое окно.
Примечание. Android применяет первый элемент в списке состояний, который соответствует текущему состоянию объекта. Если первый элемент в списке не содержит ни одного из предыдущих атрибутов состояния, он применяется каждый раз. Поэтому значение по умолчанию всегда должно быть последним, как показано в примере ниже.
- пример:
- XML-файл сохранен в
res/drawable/button.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/button_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_focused" /> <!-- focused -->
<item android:state_hovered="true"
android:drawable="@drawable/button_focused" /> <!-- hovered -->
<item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
Этот XML-код макета применяет список состояний к кнопке:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/button" />
- См. также:
-
Список уровней
Объект Drawable, который управляет несколькими альтернативными объектами Drawable, каждому из которых присвоено максимальное числовое значение. При установке значения уровня прорисовываемого ресурса с помощью setLevel() загружается прорисовываемый ресурс из списка уровней, у которого значение android:maxLevel больше или равно значению, переданному методу.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
LevelListDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/drawable_resource"
android:maxLevel="integer"
android:minLevel="integer" />
</level-list>
- elements:
-
<level-list>
- Обязательный атрибут. Это должен быть корневой элемент. Содержит один или несколько элементов
<item>.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML, которое должно быть
"http://schemas.android.com/apk/res/android".
<item>
- Определяет графический объект, который будет использоваться на определенном уровне.
Атрибуты:
android:drawable
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на прорисовываемый ресурс, который нужно вставить.
android:maxLevel
- Целое число. Максимальный уровень, разрешенный для этого предмета.
android:minLevel
- Целое число. Минимальный уровень, разрешенный для этого предмета.
- пример:
-
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/status_off"
android:maxLevel="0" />
<item
android:drawable="@drawable/status_on"
android:maxLevel="1" />
</level-list>
После применения к View уровень можно изменить с помощью setLevel() или setImageLevel().
- См. также:
-
Графический объект перехода
TransitionDrawable – это графический объект, который может плавно переходить между двумя другими графическими ресурсами.
Каждый графический объект представлен элементом <item> внутри одного элемента <transition>. Поддерживается не более двух элементов. Чтобы перейти на новую версию, позвоните по номеру startTransition(). Чтобы вернуться к предыдущему состоянию, вызовите reverseTransition().
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
TransitionDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</transition>
- elements:
-
<transition>
- Обязательный атрибут. Это должен быть корневой элемент. Содержит один или несколько элементов
<item>.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
<item>
- Определяет графический объект, который будет использоваться в качестве части перехода.
Должен быть дочерним элементом
<transition>. Принимает дочерние элементы <bitmap>.
Атрибуты:
android:drawable
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на прорисовываемый ресурс.
android:id
- Идентификатор ресурса. Уникальный идентификатор ресурса для этого графического объекта. Чтобы создать новый идентификатор ресурса для этого объекта, используйте форму
"@+id/name". Знак плюса указывает на то, что это новый идентификатор. С помощью этого идентификатора можно получить и изменить объект Drawable, используя View.findViewById() или Activity.findViewById().
android:top
- Целое число. Смещение сверху в пикселях.
android:right
- Целое число. Смещение вправо в пикселях.
android:bottom
- Целое число. Нижнее смещение в пикселях.
android:left
- Целое число. Смещение слева в пикселях.
- пример:
- XML-файл сохранен в
res/drawable/transition.xml:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/on" />
<item android:drawable="@drawable/off" />
</transition>
Этот XML-код макета применяет объект Drawable к представлению:
<ImageButton
android:id="@+id/button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/transition" />
А следующий код выполняет переход от первого элемента ко второму за 500 мс:
Kotlin
val button: ImageButton = findViewById(R.id.button)
val drawable: Drawable = button.drawable
if (drawable is TransitionDrawable) {
drawable.startTransition(500)
}
Java
ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable drawable = button.getDrawable();
if (drawable instanceof TransitionDrawable) {
((TransitionDrawable) drawable).startTransition(500);
}
- См. также:
-
Объект InsetDrawable
Объект Drawable, определенный в XML, который вставляет другой объект Drawable на указанное расстояние. Это полезно, когда для представления нужен фон, который меньше фактических границ представления.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
InsetDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<inset
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:insetTop="dimension"
android:insetRight="dimension"
android:insetBottom="dimension"
android:insetLeft="dimension" />
- elements:
-
<inset>
- Обязательный атрибут. Определяет вставку. Это должен быть корневой элемент.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
android:drawable
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на прорисовываемый ресурс, который нужно вставить.
android:insetTop
- Параметр. Верхняя вставка в виде значения или ресурса.
android:insetRight
- Параметр. Правый отступ в виде значения или ресурса.
android:insetBottom
- Параметр. Нижний отступ в виде значения или ресурса.
android:insetLeft
- Параметр. Левая вставка в виде значения или ресурса.
- пример:
-
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/background"
android:insetTop="10dp"
android:insetLeft="10dp" />
- См. также:
-
Объект ClipDrawable
Графический объект, определенный в XML, который обрезает другой графический объект на основе текущего уровня этого объекта. Вы можете контролировать, насколько дочерний объект обрезается по ширине и высоте в зависимости от уровня, а также гравитацию, чтобы контролировать, где он размещается в общем контейнере. Чаще всего используется для реализации
таких вещей, как индикаторы выполнения.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
ClipDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:clipOrientation=["horizontal" | "vertical"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"] />
- elements:
-
<clip>
- Обязательный атрибут. Определяет графический объект для обрезки. Это должен быть корневой элемент.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
android:drawable
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на обрезаемый прорисовываемый ресурс.
android:clipOrientation
- Ключевое слово. Ориентация клипа.
Использовать нужно одно из следующих значений:
| Значение | Описание |
horizontal |
Обрезать графический объект по горизонтали. |
vertical |
Обрезать графический объект по вертикали. |
android:gravity
- Ключевое слово. Указывает, где нужно обрезать объект.
Должно быть одно или несколько из следующих постоянных значений, разделенных символом |:
| Значение | Описание |
top |
Поместить объект в верхнюю часть контейнера, не меняя его размер. Если для clipOrientation задано значение "vertical", обрезка происходит в нижней части графического объекта. |
bottom |
Поместить объект в нижнюю часть контейнера, не меняя его размер. Если clipOrientation – "vertical", обрезка происходит в верхней части графического объекта. |
left |
Поместить объект у левого края контейнера, не меняя его размер. Это значение используется по умолчанию. Если для атрибута clipOrientation задано значение "horizontal", обрезка выполняется с правой стороны графического объекта. |
right |
Поместить объект у правого края контейнера, не меняя его размер. Если для атрибута clipOrientation задано значение "horizontal", обрезка выполняется по левому краю графического объекта. |
center_vertical |
Разместить объект по центру контейнера по вертикали, не меняя его размер. Обрезка выполняется так же, как и при значении "center". |
fill_vertical |
При необходимости увеличьте размер объекта по вертикали, чтобы он полностью заполнил контейнер. Если clipOrientation имеет значение "vertical", обрезка не выполняется, поскольку графический объект заполняет вертикальное пространство (если уровень графического объекта не равен 0, в этом случае он не виден). |
center_horizontal |
Разместить объект по центру контейнера по горизонтали, не меняя его размер.
Обрезка работает так же, как и при значении "center". |
fill_horizontal |
При необходимости увеличьте размер объекта по горизонтали, чтобы он полностью заполнил контейнер. Если для атрибута clipOrientation задано значение "horizontal", обрезка не выполняется, поскольку графический объект заполняет горизонтальное пространство (если только уровень графического объекта не равен 0, в этом случае он не виден).
|
center |
Объект размещается в центре контейнера по вертикальной и горизонтальной осям без изменения размера. Если clipOrientation – "horizontal", обрезка происходит слева и справа. Если clipOrientation – "vertical", обрезка происходит сверху и снизу. |
fill |
При необходимости увеличьте размер объекта по горизонтали и вертикали, чтобы он полностью заполнил контейнер. Обрезка не происходит, поскольку объект заполняет горизонтальное и вертикальное пространство (если только уровень объекта не равен 0, в этом случае он не виден). |
clip_vertical |
Дополнительный параметр, который можно задать, чтобы верхний и/или нижний края дочернего элемента были обрезаны по границам его контейнера. Обрезка выполняется по вертикали: при привязке к верхнему краю обрезается нижний край, при привязке к нижнему краю – верхний край, а если привязка не задана, обрезаются оба края.
|
clip_horizontal |
Дополнительный параметр, который можно задать, чтобы левый и/или правый края дочернего элемента были обрезаны по границам его контейнера. Обрезка выполняется по горизонтали: при левом выравнивании обрезается правый край, при правом – левый, а при отсутствии выравнивания – оба края.
|
- пример:
- XML-файл сохранен в
res/drawable/clip.xml:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/android"
android:clipOrientation="horizontal"
android:gravity="left" />
Следующий XML-код макета применяет объект ClipDrawable к представлению:
<ImageView
android:id="@+id/image"
android:src="@drawable/clip"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
В следующем коде показано, как получить объект Drawable и увеличить область обрезки, чтобы постепенно показать изображение:
Kotlin
val imageview: ImageView = findViewById(R.id.image)
val drawable: Drawable = imageview.background
if (drawable is ClipDrawable) {
drawable.level = drawable.level + 1000
}
Java
ImageView imageview = (ImageView) findViewById(R.id.image);
Drawable drawable = imageview.getBackground();
if (drawable instanceof ClipDrawable) {
((ClipDrawable)drawable).setLevel(drawable.getLevel() + 1000);
}
Увеличение уровня уменьшает количество отсечений и постепенно показывает изображение. Вот как это выглядит
на уровне 7000:
Примечание. По умолчанию задан уровень 0, при котором изображение полностью обрезано и не видно. Если уровень равен 10 000, изображение не обрезается и видно полностью.
- См. также:
-
Масштабируемый графический объект
Объект Drawable, определенный в XML, который изменяет размер другого объекта Drawable на основе его текущего уровня.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
ScaleDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:scaleHeight="percentage"
android:scaleWidth="percentage" />
- elements:
-
<scale>
- Обязательный атрибут. Определяет масштабируемый графический объект. Это должен быть корневой элемент.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
android:drawable
- Прорисовываемый ресурс. Обязательный параметр. Ссылка на прорисовываемый ресурс.
android:scaleGravity
- Ключевое слово. Указывает положение центра тяжести после масштабирования.
Должно быть одно или несколько из следующих постоянных значений, разделенных символом |:
| Значение | Описание |
top |
Поместить объект в верхнюю часть контейнера, не меняя его размер. |
bottom |
Поместить объект в нижнюю часть контейнера, не меняя его размер. |
left |
Поместить объект у левого края контейнера, не меняя его размер. Это значение используется по умолчанию. |
right |
Поместить объект у правого края контейнера, не меняя его размер. |
center_vertical |
Разместить объект по центру контейнера по вертикали, не меняя его размер. |
fill_vertical |
При необходимости увеличьте размер объекта по вертикали, чтобы он полностью заполнил контейнер. |
center_horizontal |
Разместить объект по центру контейнера по горизонтали, не меняя его размер. |
fill_horizontal |
При необходимости увеличьте размер объекта по горизонтали, чтобы он полностью заполнил контейнер.
|
center |
Объект размещается в центре контейнера по вертикальной и горизонтальной осям без изменения размера. |
fill |
При необходимости увеличьте размер объекта по горизонтали и вертикали, чтобы он полностью заполнил контейнер. |
clip_vertical |
Дополнительный параметр, который можно задать, чтобы верхний и/или нижний края дочернего элемента были обрезаны по границам его контейнера. Обрезка выполняется по вертикали: при привязке к верхнему краю обрезается нижний край, при привязке к нижнему краю – верхний край, а если привязка не задана, обрезаются оба края.
|
clip_horizontal |
Дополнительный параметр, который можно задать, чтобы левый и/или правый края дочернего элемента были обрезаны по границам его контейнера. Обрезка выполняется по горизонтали: при левом выравнивании обрезается правый край, при правом – левый, а при отсутствии выравнивания – оба края.
|
android:scaleHeight
- Процент. Высота масштаба, выраженная в процентах от границы графического объекта. Значение указывается в процентах, например 100 % или 12,5 %.
android:scaleWidth
- Процент. Ширина шкалы, выраженная в процентах от границы графического объекта. Значение указывается в процентах, например 100 % или 12,5 %.
- пример:
-
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/logo"
android:scaleGravity="center_vertical|center_horizontal"
android:scaleHeight="80%"
android:scaleWidth="80%" />
- См. также:
-
Графический объект Shape
Это стандартная фигура, определенная в XML.
- местоположение файла;
res/drawable/filename.xml
Название файла – это идентификатор ресурса.
- скомпилированный тип данных ресурса:
- Указатель ресурса на
GradientDrawable
- ссылка на ресурс:
-
В Java:
R.drawable.filename
В XML: @[package:]drawable/filename
- Синтаксис:
-
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line" | "ring"] >
<corners
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
<gradient
android:angle="integer"
android:centerX="float"
android:centerY="float"
android:centerColor="integer"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
android:type=["linear" | "radial" | "sweep"]
android:useLevel=["true" | "false"] />
<padding
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
<size
android:width="integer"
android:height="integer" />
<solid
android:color="color" />
<stroke
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
</shape>
- elements:
-
<shape>
- Обязательный атрибут. Объект ShapeDrawable. Это должен быть корневой элемент.
Атрибуты:
xmlns:android
- Строка. Обязательно. Определяет пространство имен XML. Должно иметь значение
"http://schemas.android.com/apk/res/android".
android:shape
- Ключевое слово. Определяет тип фигуры. Допустимые значения:
| Значение | Описание |
"rectangle" |
Прямоугольник, заполняющий содержащее его представление. Эта форма используется по умолчанию. |
"oval" |
Овал, соответствующий размерам содержащего его представления. |
"line" |
Горизонтальная линия, которая занимает всю ширину содержащего ее представления. Для этой фигуры требуется элемент <stroke>, определяющий ширину линии. |
"ring" |
Кольцо. |
Следующие атрибуты используются, только если android:shape="ring":
android:innerRadius
- Параметр. Радиус внутренней части кольца (отверстия в середине) в виде значения или ресурса размера.
android:innerRadiusRatio
- Float. Радиус внутренней части кольца, выраженный как отношение к ширине кольца. Например, если
android:innerRadiusRatio="5", то внутренний радиус равен ширине кольца, деленной на 5. Это значение переопределяется значением android:innerRadius. Значение по умолчанию – 9.
android:thickness
- Параметр. Толщина кольца в виде значения размера или ресурса размера.
android:thicknessRatio
- Float. Толщина кольца, выраженная как отношение к его ширине. Например, если
android:thicknessRatio="2", то толщина равна ширине кольца, деленной на 2. Это значение переопределяется значением android:innerRadius. Значение по умолчанию – 3.
android:useLevel
- Логическое значение. True, если используется как
LevelListDrawable. Обычно используется значение false, иначе фигура может не отображаться.
<corners>
- Создает закругленные углы для фигуры. Применяется, только если фигура является прямоугольником.
Атрибуты:
android:radius
- Параметр. Радиус для всех углов в виде значения размера или ресурса размера. Для каждого угла это значение переопределяется следующими атрибутами.
android:topLeftRadius
- Параметр. Радиус верхнего левого угла в виде значения размера или ресурса размера.
android:topRightRadius
- Параметр. Радиус верхнего правого угла в виде значения или ресурса.
android:bottomLeftRadius
- Параметр. Радиус левого нижнего угла в виде значения или ресурса.
android:bottomRightRadius
- Параметр. Радиус для правого нижнего угла в виде значения или ресурса.
Примечание. Для каждого угла изначально должен быть задан радиус больше 1, иначе углы не будут скруглены. Если вы хотите, чтобы определенные углы не были закруглены, вы можете использовать android:radius, чтобы установить радиус угла по умолчанию больше 1, а затем переопределить каждый угол нужными значениями, указав 0 ("0dp") там, где закругленные углы не нужны.
<gradient>
- Задает градиентную заливку фигуры.
Атрибуты:
android:angle
- Целое число. Угол градиента в градусах. 0 – слева направо, 90 – снизу вверх. Значение должно быть кратно 45. Значение по умолчанию – 0.
android:centerX
- Float. Относительное положение центра градиента по оси X (от 0 до 1,0).
android:centerY
- Float. Относительное положение центра градиента по оси Y (от 0 до 1,0).
android:centerColor
- Цвет. Необязательный цвет, который находится между начальным и конечным цветами. Указывается в виде шестнадцатеричного значения или ресурса цвета.
android:endColor
- Цвет. Конечный цвет в виде шестнадцатеричного значения или ресурса цвета.
android:gradientRadius
- Float. Радиус градиента. Применяется, только если
android:type="radial".
android:startColor
- Цвет. Начальный цвет в виде шестнадцатеричного значения или ресурса цвета.
android:type
- Ключевое слово. Тип градиента, который нужно применить. Допустимые значения:
| Значение | Описание |
"linear" |
Линейный градиент. Это значение используется по умолчанию. |
"radial" |
Радиальный градиент. Начальный цвет – это цвет в центре. |
"sweep" |
Линейный градиент. |
android:useLevel
- Логическое значение. True, если это используется как
LevelListDrawable.
<padding>
- Поля, которые нужно применить к элементу, содержащему представление. Это позволяет изменить положение контента, а не фигуры.
Атрибуты:
android:left
- Параметр. Отступ слева в виде значения или ресурса.
android:top
- Параметр. Верхнее поле в виде значения или ресурса.
android:right
- Параметр. Поле справа в виде значения размера или ресурса размера.
android:bottom
- Параметр. Нижнее поле в виде значения размера или ресурса размера.
<size>
- Размер фигуры.
Атрибуты:
android:height
- Параметр. Высота фигуры в виде значения или ресурса.
android:width
- Параметр. Ширина фигуры в виде значения размера или ресурса размера.
Примечание. По умолчанию фигура масштабируется до размера контейнера пропорционально заданным здесь размерам. При использовании фигуры в ImageView вы можете ограничить масштабирование, задав для android:scaleType значение "center".
<solid>
- Сплошной цвет для заливки фигуры.
Атрибуты:
android:color
- Цвет. Цвет, который нужно применить к фигуре, в виде шестнадцатеричного значения или ресурса цвета.
<stroke>
- Контур фигуры.
Атрибуты:
android:width
- Параметр. Толщина линии, заданная в виде значения или ресурса.
android:color
- Цвет. Цвет линии в виде шестнадцатеричного значения или ресурса цвета.
android:dashGap
- Параметр. Расстояние между штрихами в виде значения или ресурса. Действительно, только если задано значение
android:dashWidth.
android:dashWidth
- Параметр. Размер каждого штриха в виде значения или ресурса. Действительно, только если задано значение
android:dashGap.
- пример:
- XML-файл сохранен в
res/drawable/gradient_box.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#FFFF0000"
android:endColor="#80FF00FF"
android:angle="45"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="8dp" />
</shape>
Этот XML-код макета применяет фигуру к представлению:
<TextView
android:background="@drawable/gradient_box"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
Этот код приложения получает фигуру и применяет ее к представлению:
Kotlin
val shape: Drawable? = getDrawable(resources, R.drawable.gradient_box, getTheme())
val tv: TextView = findViewById(R.id.textview)
tv.background = shape
Java
Resources res = getResources();
Drawable shape = ResourcesCompat.getDrawable(res, R.drawable.gradient_box, getTheme());
TextView tv = (TextView)findViewById(R.id.textview);
tv.setBackground(shape);
- См. также:
-