不登高山,不知天之高;不臨深溪,不知地之厚
相關文章:
《Android自定義控件三部曲文章索引》
前兩篇,我為大家講述了利用xml來定義動畫及插值器,但在代碼中,我們常常是動態生成動畫的,所以,這篇將為大家講述如何用代碼生成動態生成動畫及插值器。
先簡單寫出各個標簽對應的類,方便大家理解:
scale —— ScaleAnimationalpha —— AlphaAnimationrotate —— RotateAnimationtranslate —— TranslateAnimationset —— AnimationSet官方SDK講解頁面為:《Animation》
第一篇中我們提到過,Animation類是所有動畫(scale、alpha、translate、rotate)的基類,它所具有的標簽及對應函數為:
android:duration setDuration(long) 動畫持續時間,以毫秒為單位 android:fillAfter setFillAfter(boolean)如果設置為true,控件動畫結束時,將保持動畫最后時的狀態android:fillBefore setFillBefore(boolean)如果設置為true,控件動畫結束時,還原到開始動畫前的狀態android:fillEnabled setFillEnabled(boolean)與android:fillBefore 效果相同,都是在動畫結束時,將控件還原到初始化狀態android:repeatCount setRepeatCount(int)重復次數android:repeatMode setRepeatMode(int)重復類型,有reverse和restart兩個值,取值為RESTART或 REVERSE,必須與repeatCount一起使用才能看到效果。因為這里的意義是重復的類型,即回放時的動作。android:interpolator setInterpolator(Interpolator) 設定插值器,其實就是指定的動作效果,比如彈跳效果等在第一篇《 Animation 動畫詳解(一)——alpha、scale、translate、rotate、set的xml屬性及用法》 我們已經講解了每個標簽具體所具有的功能,這里就不再細講,對于使用方法會在下面的各標簽中使用。
這是scale標簽對應的類,官方SDK頁面為:《ScaleAnimation》
在Scale標簽中,我們提到過它的自有屬性有下面幾條,先列一下:
android:fromXScale 起始的X方向上相對自身的縮放比例,浮點值,比如1.0代表自身無變化,0.5代表起始時縮小一倍,2.0代表放大一倍;android:toXScale 結尾的X方向上相對自身的縮放比例,浮點值;android:fromYScale 起始的Y方向上相對自身的縮放比例,浮點值,android:toYScale 結尾的Y方向上相對自身的縮放比例,浮點值;android:pivotX 縮放起點X軸坐標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p,當為數值時,表示在當前View的左上角,即原點處加上50px,做為起始縮放點;如果是50%,表示在當前控件的左上角加上自己寬度的50%做為起始點;如果是50%p,那么就是表示在當前的左上角加上父控件寬度的50%做為起始點x軸坐標。(具體意義,后面會舉例演示)android:pivotY 縮放起點Y軸坐標,取值及意義跟android:pivotX一樣。放到代碼中,ScaleAnimation有下面幾個構造函數:ScaleAnimation(Context context, AttributeSet attrs) 從XML文件加載動畫,基本用不到ScaleAnimation(float fromX, float toX, float fromY, float toY)ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)第一個構造函數是從本地XML文件加載動畫,基本用不到的,我們主要看下面三個構造函數。在標簽屬性android:pivotX中有三種取值,數,百分數,百分數p;體現在構造函數中,就是最后一個構造函數的pivotXType,它的取值有三個,Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT;
這三個構造函數難度不大,就不再細講,舉個例子說明:
在第一篇中Scale的例子的XML代碼為:
[html] view plain copy對應的代碼構造代碼為:
[java]%20view%20plain%20copy%20在第一篇文章中,我們構造的XML代碼為:
[java]%20view%20plain%20copy%20RotateAnimation類對應Rotate標簽,SDK文檔地址:《RotateAnimation》
Rotate標簽所具有的XML屬性有:
android:fromDegrees %20 %20開始旋轉的角度位置,正值代表順時針方向度數,負值代碼逆時針方向度數android:toDegrees %20 %20 %20 %20結束時旋轉到的角度位置,正值代表順時針方向度數,負值代碼逆時針方向度數android:pivotX %20 %20 %20 %20 %20 %20 %20縮放起點X軸坐標,可以是數值、百分數、百分數p%20三種樣式,比如%2050、50%、50%p,具體意義已在scale標簽中講述,這里就不再重講android:pivotY %20 %20 %20 %20 %20 %20 %20縮放起點Y軸坐標,可以是數值、百分數、百分數p%20三種樣式,比如%2050、50%、50%p對應的構造函數有:RotateAnimation(Context%20context,%20AttributeSet%20attrs) 從本地XML文檔加載動畫,同樣,基本不用RotateAnimation(float%20fromDegrees,%20float%20toDegrees)RotateAnimation(float%20fromDegrees,%20float%20toDegrees,%20float%20pivotX,%20float%20pivotY)RotateAnimation(float%20fromDegrees,%20float%20toDegrees,%20int%20pivotXType,%20float%20pivotXValue,%20int%20pivotYType,%20float%20pivotYValue)RotateAnimation跟ScaleAnimation差不多,關鍵問題同樣是pivotXType和pivotYType的選擇,同樣有三個取值:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT;
根據每一篇中的XML寫出對應的JAVA構造代碼:
XML為:
[java]%20view%20plain%20copy%20translate標簽所具有的屬性為:
android:fromXDelta %20 %20起始點X軸坐標,可以是數值、百分數、百分數p%20三種樣式,比如%2050、50%、50%p,具體意義已在scale標簽中講述,這里就不再重講android:fromYDelta %20 起始點Y軸從標,可以是數值、百分數、百分數p%20三種樣式;android:toXDelta%20 %20 %20 %20結束點X軸坐標android:toYDelta %20 %20 %20 結束點Y軸坐標這些屬性所對應的構造函數為:TranslateAnimation(Context%20context,%20AttributeSet%20attrs)%20 同樣,基本不用TranslateAnimation(float%20fromXDelta,%20float%20toXDelta,%20float%20fromYDelta,%20float%20toYDelta)TranslateAnimation(int%20fromXType,%20float%20fromXValue,%20int%20toXType,%20float%20toXValue,%20int%20fromYType,%20float%20fromYValue,%20int%20toYType,%20float%20toYValue)由于fromXDelta、fromYDelta、toXDelta、toYDelta這三個屬性都具有三種狀態,所以在構造函數中,最理想的狀態就是第三個構造函數,能夠指定每個值的類型,第二個構造函數:TranslateAnimation%20(float%20fromXDelta,%20float%20toXDelta,%20float%20fromYDelta,%20float%20toYDelta)使用是絕對數值。只有最后一個構造函數可以指定百分數和相對父控件的百分數。
下面以第一篇中的XML代碼為例,用JAVA代碼構造同樣的效果:
XML代碼:
[html]%20view%20plain%20copy%20增加動畫的函數為:(更多函數,請參看SDK文檔)
public%20void%20addAnimation%20(Animation%20a)下面在第一篇中的XML代碼為例寫出能構造同樣效果的JAVA代碼:
XML代碼為:
[html]%20view%20plain%20copy%20關于插值器的SDK講解見《Animation%20Resources》中的Interpolators部分;
插值器XML屬性及對應的類如下表所示: