補(bǔ)間動畫是通過對View中的內(nèi)容進(jìn)行一系列的圖形變換來實現(xiàn)動畫效果,其中圖形變換包括平移喷好、縮放翔横、旋轉(zhuǎn)、改變透明度等梗搅。補(bǔ)間動畫的效果可以通過XML文件來定義禾唁,也可以通過代碼方式來實現(xiàn),通常情況下以XML形式定義的動畫都會放置在程序res/anim(自定義的)文件夾下无切。
Android提供了4種補(bǔ)間動畫荡短,分別是透明度漸變動畫、旋轉(zhuǎn)動畫哆键、縮放動畫掘托、平移動畫,下面分別針對這4種動畫進(jìn)行詳解籍嘹。
1.透明度漸變動畫
透明度漸變動畫是指通過改變View組件透明度來實現(xiàn)的漸變效果闪盔。它主要通過為動畫指定開始時的透明度,結(jié)束時的透明度以及動畫持續(xù)時間來創(chuàng)造動畫辱士,在XML文件中定義透明度漸變動畫泪掀,具體代碼如下:
alpha_animation.xml
···
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:interpolator="@android:anim/linear_interpolator"
android:repeatMode="reverse"
android:repeatCount="infinite"
android:duration="1000"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
</set>
···
上述代碼定義了一個讓View從完全不透明到透明,持續(xù)時間1s的動畫颂碘。透明度漸變動畫常用的屬性如下族淮。
- interpolator:用于控制動畫的變化速度,一般值為@android:anim/linear_interpolator(勻速改變)凭涂、@android:anim/laccelerate_interpolator(開始慢祝辣,后來加速)等;
- repeatMode:用于指定動畫重復(fù)的方式切油,可選值為reverse(反向)蝙斜、restart(重新開始);
- repeatCount:用于制定動畫重復(fù)次數(shù)澎胡,屬性值可以為正整數(shù)孕荠,也可以為infinite(無限循壞);
- duration:用于指定動畫播放時長攻谁;
- fromAlpha:用于指定動畫開始時的透明度稚伍,0.0為完全完全透明,1.0為不透明戚宦;
- toAlpha:用于指定動畫結(jié)束時的透明度0.0為完全完全透明个曙,1.0為不透明。
2.旋轉(zhuǎn)動畫
旋轉(zhuǎn)動畫就是通過為動畫指定開始時的縮放系數(shù)受楼、結(jié)束時的縮放系數(shù)以及動畫持續(xù)時長來創(chuàng)將動畫的垦搬,在XML中定義縮放動畫呼寸,具體代碼如下:
rotate_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="reverse"
android:repeatCount="infinite"
android:duration="1000"/>
</set>
上述代碼定義了讓View從0°旋轉(zhuǎn)到360°持續(xù)時間為1s的旋轉(zhuǎn)動畫,旋轉(zhuǎn)動畫常用的屬性如下猴贰。
- fromSegress:指定動畫開始時的角度对雪;
- toDegrees:指定動畫結(jié)束時的角度;
- pivotX:指定軸心的x坐標(biāo)米绕;
- pivotY: 指定軸心y坐標(biāo)瑟捣。
2.縮放動畫
縮放動畫就是通過動畫指定開始時的縮放系數(shù)、結(jié)束時的縮放系數(shù)以及動畫持續(xù)時長來創(chuàng)建動畫的栅干,在XML文件中定義縮放動畫蝶柿,具體代碼如下:
scale_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:repeatMode="reverse"
android:repeatCount="infinite"
android:duration="3000"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="0.5"
android:toYScale="0.5"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
上述代碼定義了一個讓View在x軸上縮小一半的,y軸上縮小一半的縮放動畫非驮。縮放動畫的常用屬性如下雏赦。
- fromXScale:指定動畫開始時x軸上的縮放系數(shù)鳖链,值為1.0表示不變化莲组;
- fromYScate:指定動畫開始時y軸上的縮放系數(shù),值為1.0表示不變化;
- toXScate:指定動畫結(jié)束時x軸上的縮放系數(shù)绝骚,值為1.0表示不變化;
- toYScate:指定動畫結(jié)束時y軸上的縮放系數(shù)茂腥,值為1.0表示不變化井联;
4.平移動畫
平移動畫就是通過為動畫指定開始位置、結(jié)束位置以及動畫持續(xù)時長來創(chuàng)建動畫的寥掐,在XML文件中定義平移動畫靴寂,具體代碼如下;
translate_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0.0"
android:fromYDelta="0.0"
android:toXDelta="100"
android:toYDelta="0.0"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:duration="4000"/>
</set>
上述代碼定義了一個讓View從起始x(0.0)位置平移到結(jié)束x(100)位置召耘,持續(xù)時間為4s的平移動畫百炬。需要注意的是,這里的坐標(biāo)污它,這里的坐標(biāo)并不是屏幕像素的坐標(biāo)剖踊,而是相對于View的所在位置的坐標(biāo)。開始位置為0.0即表示在View最開始的地方平移(即布局文件定義View所在位置)衫贬。
上述代碼用到了平移動畫的一些常用屬性德澈,其常用屬性說明如下。
- formXDelta:指定動畫開始時View的x軸坐標(biāo)固惯。
- formYDelta:指定動畫開始時View的y軸坐標(biāo)梆造。
- toXDelta:指定動畫結(jié)束時View的x軸坐標(biāo)。
- toYDelta:指定動畫結(jié)束時View的y軸坐標(biāo)葬毫。