這篇文章Android 動畫基礎(chǔ) 對我動畫的學(xué)習(xí)有很大的幫助焕阿,感謝作者的無私奉獻。
在android 3.0以前首启,android支持兩種動畫模式暮屡,tween animation,frame animation,在android3.0中又引入了一個新的動畫系統(tǒng):property animation毅桃,這三種動畫模式在SDK中被稱為property animation,view animation,drawable animation褒纲。 可通過NineOldAndroids項目在3.0之前的系統(tǒng)中使用Property Animation
****需要注意的是:tween動畫的xml文件放在anim文件夾下,frame動畫的xml文件放在drawable文件夾下钥飞,Property動畫xml文件放在animator文件夾下莺掠,在設(shè)置動畫時間duration時,它的單位ms代承,1000ms=1s**
本篇文章從Tween動畫講起
一.Tween動畫
Tween動畫指的是android.view.animation包下的各個動畫汁蝶。又稱View Animation:補間動畫,給出兩個關(guān)鍵幀论悴,通過一些算法將給定屬性值在給定的時間內(nèi)在兩個關(guān)鍵幀間漸變掖棉。
當然布局文件是可以定義這些動畫,布局文件必須有一個獨立的根元素膀估,可以是 <alpha>,<scale>, <translate>, <rotate>, <set>(持有一組其它的動畫元素幔亥,甚至可以是內(nèi)嵌的set元素) 中的一個,文件是放在anim文件夾下察纯。其應(yīng)用并開啟動畫帕棉,是通過一下代碼實現(xiàn):
ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
以上分為五類:縮放针肥、平移、漸變香伴、旋轉(zhuǎn),與動畫集合
我會對著5類進行講解
1. 縮放動畫:ScaleAnimation-主要控制尺度變化的動畫類(xml使用<scale>)
使用以下構(gòu)造方法可獲取ScaleAnimation對象:
ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
其中參數(shù):
- fromX:動畫開始X坐標上的伸縮尺度慰枕;相等于xml文件的fromXScale
- toX:動畫結(jié)束X坐標上的伸縮尺度;相等于xml文件的toXScale
- fromY:動畫開始Y坐標上的伸縮尺度即纲;相等于xml文件的fromYScale
- toY:動畫結(jié)束Y坐標上的伸縮尺度具帮;相等于xml文件的toYScale
Float值,為動畫起始到結(jié)束時低斋,X蜂厅、Y坐標上的伸縮尺寸
0.0表示收縮到?jīng)]有(0.0f)
1.0表示正常無伸縮 (1.0f)
- pivotXType:X坐標上的伸縮模式,取值有:Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_PARENT膊畴;
- pivotYType:Y坐標上的伸縮模式掘猿,取值有:Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_PARENT;
RELATIVE_TO_PARENT 相對于父控件
RELATIVE_TO_SELF 相對于自己本身
ABSOLUTE 絕對坐標- pivotXValue:X坐標上的伸縮值唇跨;相當于xml文件的pivotX
- pivotYValue:Y坐標上的伸縮值稠通;相當于xml文件的pivotY
代表縮放的中軸點X/Y坐標,浮點值
如果我們想表示中軸點為圖像的中心轻绞,我們可以把兩個屬性值定義成0.5或者50%采记。
2. 平移動畫:TranslateAnimation-主要控制位置變換的動畫實現(xiàn)類(xml使用<translate>)
使用以下構(gòu)造方法可獲取TranslateAnimation對象:
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
其中參數(shù)
- fromXDelta:動畫開始的X坐標;
- toXDelta:動畫結(jié)束的X坐標政勃;
- fromYDelta:動畫開始的Y坐標唧龄;
- toYDelta:動畫結(jié)束的Y坐標;
**代表動畫起始或者結(jié)束X / Y方向上的位置奸远,F(xiàn)loat或者百分比值
浮點數(shù)num%既棺、num%p分別相對于自身或者父控件
如果以浮點數(shù)字表示,是一個絕對值懒叛,代表相對自身原始位置的像素值丸冕;
如果以num%表示,代表相對于自己的百分比薛窥,比如toXDelta定義為100%就表示在X方向上移動自己的1倍距離
如果以num%p表示胖烛,代表相對于父類組件的百分比。**
3.漸變動畫:AlphaAnimation-主要控制透明度變化動畫類(xml使用<alpha>)
使用以下構(gòu)造方法可獲取AlphaAnimation對象:
AlphaAnimation(float fromAlpha, float toAlpha)
其中參數(shù)
- fromAlpha:動畫開始時的透明度(取值范圍為0.0到1.0)诅迷;
- toAlpha:動畫結(jié)束時的透明度佩番;
代表動畫開始和結(jié)束時透明度,0.0表示完全透明罢杉,1.0表示完全不透明趟畏,F(xiàn)loat值
旋轉(zhuǎn)動畫:RotateAnimation-主要控制旋轉(zhuǎn)的動畫實現(xiàn)類(xml使用<rotate>)
使用以下構(gòu)造方法可獲取RotateAnimation對象:
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
- fromDegrees:旋轉(zhuǎn)開始角度;
- toDegrees:旋轉(zhuǎn)結(jié)束角度滩租;
代表起始和結(jié)束的角度赋秀,浮點值利朵,單位:度- pivotXType, pivotXValue, pivotYType, pivotYValue與尺度變化動畫ScaleAnimation類似;
**其中android:pivotX 屬性代表旋轉(zhuǎn)中心的X坐標值
android:pivotY 屬性代表旋轉(zhuǎn)中心的Y坐標值
Float值或者百分比
這兩個屬性也有三種表示方式猎莲,但是X軸都是相對方向都是Left绍弟,Y軸都是相對于Top
浮點數(shù)、num%著洼、num%p晌柬;
數(shù)字方式代表相對于自身左邊緣的像素值,
num%方式代表相對于自身左邊緣或頂邊緣的百分比郭脂,
num%p方式代表相對于父容器的左邊緣或頂邊緣的百分比 **
上面的4個動畫都可以調(diào)用setRepeatCount(),setDuration()等等方法澈歉。
5.動畫集合:AnimationSet(xml使用<set>)
常使用以下構(gòu)造方法可獲取RotateAnimation對象:
AnimationSet(boolean shareInterpolator)
其中參數(shù)
- shareInterpolator:Boolean值展鸡, true:代表在所有的子元素中共享同一個插值器
- 其中<set>有屬性android:interpolator
應(yīng)用于動畫的插值器。該值必須是一個指定了插值器資源的引用(不是一個插值器的類名)埃难,在平臺中有缺省的插值器資源可以使用莹弊,或者你可以創(chuàng)建自己的插值器資源,可以看下面關(guān)于插值器的討論涡尘。- 其中<set>有屬性android:fillAfter=”true”后忍弛,這個動畫執(zhí)行完之后保持最后的狀態(tài)
通過調(diào)用addAnimation(),來添加各種tween動畫考抄,也包括AnimationSet细疚。