終于有時間可以詳細去了解一下 android動畫,先從android動畫基礎著手。在android 3.0之前android動畫api主要是android.view.Animation包下的內容,來先看看這個包里面主要的類
<?xml version="1.0" encoding="utf-8"?>
<set xmlns: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>
布局文件必須有一個獨立的根元素,可以是,,,,(持有一組其它的動畫元素,可以是內嵌的set元素)中的一個
1****
android:interpolator動畫插補器,該值必須是了解一個指定插值器的引用(不是一個類名),在平臺中有缺省的插值器資源可以使用,或者自己創建插值器資源
android:shareInterpolator
Boolean 值,true:代表在所有的字元素中共享同一個插值器
Interpolator的具體使用方法
interpolator定義了動畫變化的速率,在Animations框架當中定義了一下幾種Interpolator
1、AccelerateDecelerateInterpolator:在動畫開始與結束的地方速率變化比較慢,在中間的時候速率快。
2、accelerateInterpolator:在動畫開始的地方速率變化比較慢,然后開始加速。
3、CycleInterpolator:動畫循環播放特定的次數,速率改變沿著正弦曲線
4、DecelerateInterpolator:在動畫開始的時候速率改變比較慢,然后開始減速
5、linearInterpolator:動畫以均勻的速率改變
自定義插值器
如果你對系統提供的插值器不滿意,我們可以創建一個插值器資源修改插值器的屬性,比如修改Aniticipateinterpolator的加速速率,調整CycleInterpolator的循環次數等,為了完成這種序曲,我們需要創建xml資源文件,然后再動畫元素中引用即可。幾種常用的插值器可調整的屬性
無
android:factor 浮點值,加速速率,默認為1
android:tension 浮點值,起始點后退的張力、拉力數,默認為2
android:tension 同上 android:extraTension 浮點值,拉力的倍數,默認1.5(2 *1.5)
無
android:cycles int,循環的個數,默認為1
android:factor 浮點值,減速的速率,默認為1
無
浮點值,超出終點后的張力、拉力,默認為2
<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"/>
This animation XML will apply the interpolator:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/my_overshoot_interpolator"
android:fromXScale="1.0"
android:toXScale="3.0"
android:fromYScale="1.0"
android:toYScale="3.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700" />
如果簡單的修改插值器的屬性還不能夠滿足我們的需求,那么就自己來通過實現Interplator接口來定義自己的插值器,上面所有的Interpolator都實現了Interpolator接口,這個接口定義了一個方法:float getInterpolation(float intput);
此方法由系統調用,input代表動畫的時間,在0和1之間,也就是開始和結束。
Frame動畫
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource_name"
android:duration="integer" />
</animation-list>
必須作為跟元素,包含一個或者多個根元素
屬性:android:oneshot: true: 只執行一次動畫, false: 循環執行
一幀獨立動畫,必須是的子元素
屬性:drawable資源圖片
android:duration integer類型,該幀的時長,單位為毫秒