<transition> (клас TransitionDrawable)

Є розширенням попереднього layer-list і дозволяє використовувати накладення.

В тезі transition зазначаються два об'єкта Drawable, між якими можна перемикатися з fade-ефектом і зазначенням тривалості переходу.

<level-list> (клас LevelListDrawable)

Використовуючи LevelListDrawable, ви можете ефективно розміщувати ресурси Drawable один поверх іншого, вказуючи цілочисельний індекс для кожного шару.

<level-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:maxLevel="0" android:drawable="@drawable/cat_0"/>

<item android:maxLevel="1" android:drawable="@drawable/cat_1"/>

<item android:maxLevel="2" android:drawable="@drawable/cat_2"/>

<item android:maxLevel="4" android:drawable="@drawable/cat_4"/>

<item android:maxLevel="6" android:drawable="@drawable/cat_6"/>

<item android:maxLevel="8" android:drawable="@drawable/cat_8"/>

<item android:maxLevel="10" android:drawable="@drawable/cat_10"/>

</level-list>

Щоб вивести на екран певне зображення, викличте метод setImageLevel() з уявлення, якому призначений ресурс LevelListDrawable, передаючи в якості параметра індекс об'єкта Drawable, який ви хочете відобразити.

imageView.setImageLevel(5);

Уявлення відобразить ресурс з відповідним (або більшим) індексом. Ресурс LevelListDrawable потрібен при компонуванні віджетів.

<rotate> (клас RotateDrawable)

Даний ресурс дозволяє повернути зображення на потрібний градус. Припустимо, у вас є стрілки в різні боки. Зовсім не обов'язково створювати копії стрілок. Достатньо намалювати одну стрілку, а в файлах прописати потрібні повороти. Наприклад, повернемо значок додатка догори дригом у файлі drawable/rotate_up.xml:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"

android:drawable="@drawable/ic_launcher_cat"

android:fromDegrees="180"

android:toDegrees="180"

android:pivotX="50%"

android:pivotY="50%" />

Привласніть атрибуту src компонента ImageView і ви побачите значок перевернутим.

drawable — зображення для повороту;
fromDegrees — початковий кут повороту в градусах. За замовчуванням 0.0;
toDegrees — кінцевий кут повороту в градусах. За замовчуванням 360.0;
pivotX — опорна точка X;
pivotY — опорна точка Y.

Опорна точка - це місце для віртуального шпильки, навколо якої буде обертатися пришпилений листок. Для центру ми вказали половину по висоті і ширині. Для нерухомої картинки кути повороту можна вказати однаковими.

Тег rotate також використовується в анімаційних ресурсах, не плутайте їх.

<scale> (ScaleDrawable клас)

Дозволяє масштабувати (стиснути або розширити) зображення по горизонтальній (scaleWidth) та/або вертикальної (scaleHeight) осі і змістити отримане зображення у вказану частину (scaleGravity) доступного простору.

<?xml version="1.0" encoding="utf-8"?>

<scale xmlns:android="http://schemas.android.com/apk/res/android"

android:drawable="@drawable/ic_launcher_cat"

android:scaleGravity="center_vertical|center_horizontal"

android:scaleHeight="180%"

android:scaleWidth="80%" />

<selector> (клас StateListDrawable)

У деяких елементів управління є різні стани: натиснуто, вибрано і т.д.. Ви можете задавати зображення для будь-якого з таких станів.

Щоб описати StateListDrawable, створіть файл у форматі XML, у якому вказуються різні ресурси Drawable для кожного стану компонента. Кожен атрибут виду android:state_* може приймати одне з двох значень: true або false.

Доступні наступні стани:

state_focused - у фокусі чи ні;
state_window_focused - чи має фокус батьківське вікно;
state_enabled - доступний чи ні;
state_checkable - може бути відзначений чи ні;
state_checked - відзначений чи ні;
state_selected - виділено чи ні;
state_activated - активований чи ні;
state_pressed - натиснутий або не натиснутий;
state_hovered - знаходиться курсор над компонентом чи ні (з API 11 і вище);

Для списків є також:

state_single
state_first
state_middle
state_last

Розглянемо приклади. Нас не влаштовує зовнішній вигляд кнопки. Хочеться, щоб вона виглядала так (та ще й щоб підсвічувалася при натисканні):

Зробити це просто. Додаємо в ресурси нормального зображення (button_up.png) і натиснутого (button_down.png) станів кнопки. І створюємо в папці drawables в XML-файл з наступним змістом (states_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_down" />

<item android:drawable="@drawable/button_up" />

</selector>

Важливий момент: у списку станів потрібно спочатку вказувати спеціалізовані стани, а останнім повинен слідувати стан за замовчуванням (без state-* атрибутів взагалі).

Ще один момент. Кнопка може одночасно перебувати в стані pressed і focused, тому вказуйте спочатку state_pressed, а потім state_focused. Інакше, якщо кнопка буде в стані focused, то стан pressed не застосується.

Тепер залишилося у атрибута background для кнопки прописати створений ресурс.

<Button android:layout_width="wrap_content" android:layout_height="wrap_content"

android:background="@drawable/states_button"

android:text="Custom button"

android:textSize="18dip"

/>

Можна обійтися без використання зображень для кнопки, а скористатися фігурами (states_shapes.xml).

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true">

<shape>

<gradient android:type="linear" android:endColor="#6699CC" android:startColor="#99CCFF" android:angle="90.0" />

<corners android:radius="5.0dip" />

<padding android:left="20dip" android:right="20dip" android:top="7dip" android:bottom="7dip"/>

</shape>

</item>

<item>

<shape>

<gradient android:type="linear" android:endColor="#336699" android:startColor="#99CCFF" android:angle="90.0" />

<corners android:radius="5.0dip" />

<padding android:left="20dip" android:right="20dip" android:top="7dip" android:bottom="7dip"/>

</shape>

</item>

</selector>

А можна просто використовувати кольори:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true" android:color="#ffff0000"/>

<item android:state_focused="true" android:color="#ff0000ff"/>

<item android:color="#ff000000"/>

</selector>

Спробуйте застосувати файл не до атрибуту background, а до атрибуту android:textColor, щоб колір впливав на текст кнопки, а не на саму кнопку.

Можна використовувати як шпаргалку наступну картинку.

 

 

 

RadioBox, CheckBox та ін.

Схожим чином можна задавати стилі для RadioButtom, CheckBox і т. п. А тут мало того, що можна окремим ресурсом задавати фон, так окремим же ресурсом можна ставити саму піктограму через атрибут button (states_compound.xml).

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_checked="true">

<shape android:shape="oval">

<gradient android:startColor="#00FF00" android:endColor="#00000000" android:type="radial" android:gradientRadius="7"/>

<size android:width="10dip" android:height="10dip" />

</shape>

</item>

<item>

<shape android:shape="oval">

<gradient android:startColor="#FF0000" android:endColor="#00000000" android:type="radial" android:gradientRadius="7"/>

<size android:width="10dip" android:height="10dip" />

</shape>

</item>

</selector>

Розмітка зі створеними стилями

<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"

android:button="@drawable/states_compound"

android:text="Item 1"

android:paddingLeft="20dip"/>

<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"

android:button="@drawable/states_compound"

android:checked="true"

android:text="Item 2"

android:paddingLeft="20dip"/>

<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"

android:button="@drawable/states_compound"

android:text="Item 3"

android:paddingLeft="20dip"/>

Цікаві приклади на цю тему: Додаток

Вікторія Пряжнікова


2016-06-01 • Просмотров [ 43 ]