上一篇:/kf/201204/127802.html
視圖動畫框架支持補間動畫和幀動畫,它們都能夠在XML中聲明。以下介紹如如何使用這兩種方法:
補間動畫
在XML中定義的動畫,他執行諸如旋轉、漸變、移動和圖形的拉伸。
文件位置(FILE LOCATION):
res/anim/filename.xml,文件名被用於資源ID。
編譯資源類型(COMPILED RESOURCE DATATYPE):
資源指向一個Animation對象
資源引用(RESOURCE REFERENCE):
在Java代碼中:R.anim.filename
在XML中:@[package:]anim/filename
語法(SYNTAX):
<?xml version="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true" | "false"] >
<alpha
android:fromAlpha="float"
android:toAlpha="float"/>
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float"/>
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float"/>
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float"/>
<set>
…
</set>
</set>
這個文件必須有一個單獨的根元素:既可以是<alpha>、<scale>、<translate>、<rotate>,也可以是持有一組其他動畫元素的<set>元素(甚至使用嵌套的<set>元素)。
元素(ELEMENTS):
<set>
它是一組動畫元素的集合,可以包括<alpha>、<scale>、<translate>、<rotate>元素,也可以是另一個<set>元素集合。它代表瞭一個AnimationSet對象。
屬性(ATTRIBUTES):
android:interpolator
插補資源。它指定一個應用與動畫的插補器。這個值必須引用特定的插補器資源(不是插補器類名)。可以利用來自平臺的默認的插補器資源,也能夠創建自己的插補器資源,更多的信息請參照稍後討論的“插補器”。
android:shareInterpolator
佈爾值,如果要在所有的子元素中共享插補器,就要設置為”true”。
<alpha>
設定漸進或漸出動畫,代表一個AlphaAnimation對象。
屬性(ATTRIBUTES):
android:fromAlpha
浮點值。指定動畫開始時,對象的透明偏移量。0.0是透明的,1.0是不透明的。
android:toAlpha
浮點值。指定動畫結束時,對象的透明偏移量。0.0是透明的,1.0是不透明的。
關於<alpha>元素所支持的屬性,請參看Animation類。
<scale>
設定尺寸的動畫。可以指定圖片從它的中心點向外擴展或向內收縮,這個圖片的初始大小可以通過pivotX和pivotY屬性來指定。例如,如果這些值都設定為0,那麼動畫對象從左上角開始向右下角生長。它代表瞭一個ScaleAnimation對象。
屬性(ATTRIBUTES):
android:fromXScale
浮點值。動畫開始,在X軸的偏移尺寸,1.0代表沒有改變。
android:toXScale
浮點值。動畫結束時,在X軸的偏移尺寸,1.0代表沒有改變。
android:fromYScale
浮點值。動畫開始,在Y軸的偏移尺寸,1.0代表沒有改變。
android:toYScale
浮點值。動畫結束時,在Y軸的偏移尺寸,1.0代表沒有改變。
android:pivotX
浮點值。指定動畫對象被縮放時,要保留的固定X軸的寬度。
androd:pivotY
浮點值。指定動畫對象被縮放時,要保留的固定Y軸的寬度。
有關<scale>元素所支持的更多的屬性,請參照Animation類。
<translate>
垂直或/和水平移動。以下屬性都支持下列三種格式中任意一種格式的屬性值:用“%”結尾的-100到100之間的數,指定相對與自身的百分比;用“%p”結尾的-100到100之間的數,指定相對於父窗口的百分比;不帶有後綴的浮點數,指定移動的絕對值,它代表瞭一個TranslateAnimation對象。
屬性(ATTRIBUTES)
android:fromXDelta
浮點值或百分比,它設定瞭動畫開始時X軸的偏移量,既可以是相對與普通位置的像素值(如5),也可以是相對與元素自身寬度的百分比(如5%),還可以是相對於父窗口寬度的百分比(如5%p)。
android:toXDelta
浮點值或百分比,它設定瞭動畫結束時X軸的偏移量,既可以是相對與普通位置的像素值(如5),也可以是相對與元素自身寬度的百分比(如5%),還可以是相對於父窗口寬度的百分比(如5%p)。
android:fromYDelta
浮點值或百分比,它設定瞭動畫開始時Y軸的偏移量,既可以是相對與普通位置的像素值(如5),也可以是相對與元素自身寬度的百分比(如5%),還可以是相對於父窗口寬度的百分比(如5%p)。
android:toYDelta
浮點值或百分比,它設定瞭動畫結束時X軸的偏移量,既可以是相對與普通位置的像素值(如5),也可以是相對與元素自身寬度的百分比(如5%),還可以是相對於父窗口寬度的百分比(如5%p)。
有關<translate>元素支持的更多屬性,請參照Animation類。
<roate>
一個旋轉動畫。代表一個RotateAnimation對象。
屬性(ATTRIBUTES)
android:fromDegrees
浮點值。指定動畫開始時的角度。
android:toDegrees
浮點值,指定動畫結束時的角度。
android:pivotX
浮點值或百分比,它是旋轉中心的X軸坐標,既可以是相對於對象左邊緣的像素值(如5),也可以是相對與對象左邊緣的百分比(如5%),還可以是相對於父容器的左邊緣的百分比(如5%p)。
android:pivotY
浮點值或百分比,它是旋轉中心的Y軸坐標,既可以是相對於對象上邊緣的像素值(如5),也可以是相對與對象上邊緣的百分比(如5%),還可以是相對於父容器的上邊緣的百分比(如5%p)。
有關<rotate>支持的更多屬性,請參照Animation類。
例子
XML文件被保存在res/anim/hyperspace_jump.xml中:
<setxmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700"/>
<set
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="700">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400"/>
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400"/>
</set>
</set>
應用程序代碼把這個動畫應用於一個ImageView對象,並啟動這個動畫。
ImageView image =(ImageView) findViewById(R.id.image);
Animation hyperspaceJump =AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
摘自 FireOfStar的專欄