内联复杂的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版本兼容。