先看段關於android中動畫設定檔的虛擬碼:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <alpha /> <rotate /> <scale/> <translate/> </set> <?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <alpha /> <rotate /> <scale/> <translate/></set>
現在來慢慢理清楚:
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android
申明xml的命名空間,xmlns(xml namespace的縮寫),而冒號後面是給這個引用起的別名schemas是xml約束檔案,規定了xml中有哪些元素(標籤),元素有哪些屬性以及各元素的關係,當申明了命名空間和約束檔案後,就可以在改xml文檔中引用資源,存放在apk/res/android下的資源都可以訪問,比如在寫<rotate/>中的屬性時,用"android:"這樣來引用的,當然也可以自己定義自己的資源檔(比如test),就可以用"test:"這樣來引用。
android:interpolator="@android:anim/decelerate_interpolator" android:interpolator="@android:anim/decelerate_interpolator"
首先明白interpolator是定義一個動畫的變動率,這使得基本的動畫效果(scale、alpha、translate、rotate)得以加速、減速以及重複等等,用通俗的話來講就是動畫的進度使用Interpolator來控制,控制效果有勻速、正加速、負加速、無規則變速等等,Interpolator介面只有一個抽象方法getInterpolation(float input),由此SDK中擴充了另外幾個類。
常用Interpolator類:
AccelerateInterpolator:動畫從開始到結束,變動率是一個加速的過程。
DecelerateInterpolator:動畫從開始到結束,變動率是一個減速的過程。
AccelerateDecelerateInterpolator:動畫從開始到結束,變動率是先加速後減速的過程。
androidSDK中動畫分為兩種,
一種是Tween Animation(漸層動畫):通過對情境裡的對象不斷地做映像變換處理,如平移、縮放、旋轉等。
一種是Frame Animation(幀動畫):順序播放實現做好的映像。
android中的四種動畫
四種動畫是android提供的基本動畫類型,在設定檔中,他們都可以放在<set></set>標籤中,那麼怎樣建立一個動畫效果呢。看下面的xml動畫設定檔:
第一步:在res目錄下建立一個名字為anim的檔案夾,並且在這個檔案夾下建立一個新的xml檔案,檔案名稱字自擬。
第二步:添加命名空間,即寫set標籤,並且指定動畫的控制器(可以不寫)。
第三步:開始制定和設定動畫類型及動畫初值。
請注意當有rotate標籤和translate標籤一起使用時,請將rotate標籤放在translate之前。
各個標籤的屬性含義
set標籤屬性的含義:
android:shareInterpolator—— 是否共用插入器,共用時,四個子節點都用一個插入器
android:interpolator ——指定一個動畫的插入器,使用系統資源
android:fillEnabled——當設定為true時,fillAfter和fillBefroe將會都為true,此時會忽略fillBefore和fillAfter兩種屬性
android:fillAfter——該動畫轉化是否在動畫結束後被應用boolean
android:fillBefore——該動畫轉化是否在動畫開始前被應用boolean
android:repeatMode—— 重複模式restart 或者 reverse
android:repeatCount ——重複次數integer
android:duration ——動畫期間integer
android:startOffset—— 動畫時間間隔long
android:zAdjustment——定義動畫zorder的變換normal 或者 top 或者 bottom
scale標籤屬性的含義:
android:interpolator——同set屬性
android:fromXScale——動畫開始時,x座標上的延伸尺寸(float 0.0表示收縮到最小,1.0表示無收縮)
android:toXScale——同理
android:fromYScale——同理
android:toYScale——同理
android:duration——動畫持續的時間(int 單位毫秒)
android:pivotX——動畫的開始時相對於物件的x位置(0%~100%)
android:pivotY——同理
android:fillEnabled ——同set屬性
android:fillBefore——同set屬性
android:fillBefore——同set屬性
android:fillAfter——同set屬性
android:startOffset——同set屬性
android:repeatCount——同set屬性
android:repeatMode——同set屬性
rotate標籤屬性的含義:
android:fromDegrees—— 動畫開始時的角度(有加號或減號之分)
android:toDegrees——動畫結束時的角度(有加號或減號之分)
android:pivotX——可以理解為旋轉的中心(0%~100%)
android:pivotY——同理
android:duration——動畫持續的時間(int 單位毫秒)
alpha標籤屬性的含義:
android:toAlpha——動畫結束時的透明度(float 0表示完全透明 1表示完全不透明)
android:duration——動畫持續的時間(int 單位毫秒)
android:fromAlpha——動畫開始時的透明度(float 0表示完全透明 1表示完全不透明)
translate標籤屬性的含義:
android:fromXDelta——動畫開始時,X座標上的位置integer 預設以自己為參照物
android:toXDelta——動畫結束時,X座標上的位置integer 預設以自己為參照物
android:fromYDelta——動畫開始時,Y座標上的位置integer 預設以自己為參照物
android:toYDelta——動畫結束時,Y座標上的位置integer 預設以自己為參照物
當然,scale,rotate,alpha,translate中的屬性不止這些,還有些和set標籤一樣,就沒有重複寫。到這裡android動畫最簡單的知識就完了。接下來還會繼續學習,繼續總結。