Встроенные сложные XML-ресурсы

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

res/drawable/avd.xml
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/vectordrawable" >
    <target
        android:name="rotationGroup"
        android:animation="@anim/rotation" />
</animated-vector>
res/drawable/vectordrawable.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="64dp"
    android:width="64dp"
    android:viewportHeight="600"
    android:viewportWidth="600" >
    <group
        android:name="rotationGroup"
        android:pivotX="300.0"
        android:pivotY="300.0"
        android:rotation="45.0" >
        <path
            android:fillColor="#000000"
            android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
    </group>
</vector>
res/anim/rotation.xml
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/android"
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />

Если векторный рисунок и анимация повторно используются в другом месте, это лучший способ реализовать анимированный векторный рисунок. Но если эти файлы используются только для рисования анимированного вектора, то существует более компактный способ их реализации.

Используя встроенный формат ресурсов AAPT, вы можете определить все три ресурса в одном XML-файле, как показано в следующем примере. Для рисования анимированного вектора поместите файл в res/drawable/ .

res/drawable/avd.xml
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt" >

    <aapt:attr name="android:drawable" >
        <vector
            android:height="64dp"
            android:width="64dp"
            android:viewportHeight="600"
            android:viewportWidth="600" >
            <group
                android:name="rotationGroup"
                android:pivotX="300.0"
                android:pivotY="300.0"
                android:rotation="45.0" >
                <path
                    android:fillColor="#000000"
                    android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
            </group>
        </vector>
    </aapt:attr>

    <target android:name="rotationGroup">
        <aapt:attr name="android:animation" >
            <objectAnimator
                android:duration="6000"
                android:propertyName="rotation"
                android:valueFrom="0"
                android:valueTo="360" />
        </aapt:attr>
    </target>
</animated-vector>

Тег XML <aapt:attr > сообщает AAPT рассматривать дочерний элемент тега как ресурс и извлекать его в собственный файл ресурсов. Значение имени атрибута указывает, где использовать встроенный ресурс в родительском теге.

AAPT генерирует файлы ресурсов и имена для всех встроенных ресурсов. Приложения, созданные с использованием этого встроенного формата, совместимы со всеми версиями Android.