Главная » Разработка для Android » Композитные ресурсы для рисования

0

Используйте данный вид ресурсов для объединения и манипулирования другими ресурсами.

Внутри описания композитных ресурсов могут быть использованы рас- тровые изображения, геометрические фигуры  и цвета. Кроме того, сами композитные ресурсы можно использовать один внутри другого, назначая их для Представлений точно так же, как и любые другие виды ресурсов.

Ресурсы, описывающие преобразования

Вы можете масштабировать и поворачивать ресурсы Drawable, исполь- зуя классы ScaleDrawable и RotateDrawable. Такие  преобразования чрез- вычайно  полезны  при создании  индикаторов выполнения задач или для добавления  анимации  к Представлениям.

ScaleDrawable. Используйте атрибуты  scaleHeight и scaleWidth внутри тега <scale>, чтобы описать высоту и ширину относительно гра- ниц оригинального объекта Drawable. Добавьте атрибут scaleGravity для изменения опорной точки масштабированного изображения.

RotateDrawable. Используйте атрибуты fromDegrees и toDegrees внутри тега <rotate>, чтобы задать начальный и конечный углы по- ворота вокруг опорной точки. Опорная точка указывается с помощью атрибутов pivotX и pivotY, которые содержат процентные значения относительно ширины  и высоты объекта Drawable  соответственно. Запись  делается в виде nn%.

Чтобы применить  масштабирование и поворот в процессе выполнения программы,  используйте метод setLevel  из Представления, содержащего объект Drawable, переходя при этом от начального к конечному значению (от 0 до 10 000).

В процессе перехода уровень 0 представляет начальный угол (или наи- меньший масштаб). Уровень 10 000 указывает на завершение  преобразова- ния (конечный угол или самый большой масштаб).

В листинге 4.19 описаны ресурсы ScaleDrawable и RotateDrawable. В ли- стинге 4.20 показано,  как управлять этими ресурсами  в коде программы после того, как они были назначены  для объекта ImageView.

Листинг 4.19. Файлы с ресурсами RotateDrawable и ScaleDrawable

<!– Ресурс RotationDrawable –>

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

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

android:fromDegrees="0" android:toDegrees="90" android:pivotX="50%" android:pivotY="50%"

/>

<!– Ресурс ScaleDrawable –>

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

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

android:scaleHeight="100%" android:scaleWidth="100%"

/>

Листинг 4.20. Применение преобразований (поворота  и масштабирования)

в коде программы

ImageView rotatingImage = (ImageView)findViewById(R. id.RotatingImageView);

ImageView scalingImage = (ImageView)findViewById(R.id.ScalingImageView);

// Поверните изображение на 50% от итогового угла. rotatingImage.setImageLevel(5000);

// Масштабируйте изображение до 50% от его финального размера. scalingImage.setImageLevel(5000);

LayerDrawable

LayerDrawable позволяет  накладывать несколько  объектов  Drawable один поверх другого. Описав  массив полупрозрачных объектов Drawable,

вы можете создать сложную  комбинацию  динамических фигур  и преоб- разований.

Кроме того, вы можете применять к LayerDrawable те же преобразо- вания, которые были описаны в предыдущем разделе, а также сочетать их с ресурсами StateListDrawable и LevelListDrawable, речь о которых пойдет дальше.

В листинге 4.21 LayerDrawable описывается с помощью тега <layer- list>, внутри которого для каждого дочернего узла <item> используется атрибут drawable, указывающий на ресурс для наложения.

Каждый объект Drawable будет накладываться в соответствии со своим индексом — первый элемент массива размещается в самом низу.

Листинг 4.21. Описание  ресурса LayerDrawable в формате XML

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

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

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

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

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

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

</layer-list>

StateListDrawable

StateListDrawable — это композитный ресурс, позволяющий отображать разные объекты Drawable  в зависимости от состояния Представления, для которого они были назначены.

Ресурс  StateListDrawable используется в большинстве  стандартных Представлений в Android,  например  в виде изображений кнопок или фона для обычных элементов списка ListView.

Чтобы описать StateListDrawable, создайте файл в формате XML, в ко- тором указываются разные ресурсы Drawable для каждого состояния Пред- ставления, как показано в листинге 4.22.

Листинг 4.22. Ресурс StateListDrawable

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

<item android:state_window_focused="false" android:drawable="@drawable/widget_bg_normal"/>

<item android:state_pressed="true" android:drawable="@drawable/widget_bg_pressed"/>

<item android:state_focused="true" android:drawable="@drawable/widget_bg_selected"/>

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

</selector>

LevelListDrawable

Используя LevelListDrawable, вы можете эффективно размещать  ре- сурсы Drawable один поверх другого, указывая целочисленный индекс для каждого слоя, как показано в листинге 4.23.

Листинг 4.23. Ресурс LevelListDrawable

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

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

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

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

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

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

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

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

</level-list>

Чтобы вывести на экран определенное изображение, вызовите метод setImageLevel из Представления, которому назначен ресурс LevelListDrawable, передавая  в качестве параметра индекс объекта Drawable,  который вы хо- тите отобразить.

imageView.setImageLevel(5);

Представление отобразит  ресурс с соответствующим (или  большим)

индексом. Ресурс LevelListDrawable нужен при компоновке виджетов.

Ресурс NinePatch

Изображения формата NinePatch (растягивающиеся) — это PNG-файлы, где некоторые помеченные  части могут быть растянуты.  Они должны опи- сываться  в формате  PNG  и иметь расширение .9.png. Идентификатор ресурсов для NinePatch — это имя файла без окончания .9.png.

NinePatch — разновидность PNG-файлов, которые содержат рамку тол- щиной в один пиксел.  Данная  рамка описывает  область, которая  может растягиваться при изменении размеров изображения. Чтобы создать ресурс NinePatch, нарисуйте по его левому и верхнему краям изображения черные полоски  толщиной  в один пиксел, описывающие растягиваемый участок. Части  рисунка,  не отмеченные  подобным  образом, останутся  прежними; изменения размеров  изображения будут пропорционально влиять  на от- носительные размеры помеченных участков.

ПРИМЕЧАНИЕ

Ресурс NinePatch — мощный инструмент, способный создавать фоновые изображения для Представлений или Активностей, размеры которых могут меняться. К примеру, NinePatch используется в Android при соз- дании обрамления для кнопок.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии