Android View動畫(檢視動畫)
安卓中的動畫有:檢視動畫(也叫補間動畫,tween動畫)、Drawable動畫(也叫Frame動畫、幀動畫)和Property動畫(屬性動畫)。
檢視動畫
在一個檢視容器內執行一系列簡單變換(位移、縮小放大、旋轉、透明度),使用這個動畫時,控制元件的點選的區域還是在原來的位置上,並不會因為檢視移動而點選區域發生改變。
建立檢視動畫有兩種方式:程式碼建立和xml。
java類名 | xml關鍵字 | 描述資訊 |
---|---|---|
AlphaAnimation |
<alpha> |
漸變透明度動畫效果 |
RotateAnimation |
<rotate> |
畫面轉移旋轉動畫效果 |
ScaleAnimation |
<scale> |
漸變尺寸伸縮動畫效果 |
TranslateAnimation |
<translate> |
畫面轉換位置移動動畫效果 |
AnimationSet |
<set> |
一個持有其它動畫元素alpha、scale、translate、rotate或者其它set元素的容器 |
Animation抽象類是所有補間動畫類的基類,所以基類會提供一些通用的動畫屬性。所有檢視動畫都具備此屬性,可以設定一個或多個。
xml屬性 | java方法 | 解釋 |
---|---|---|
android:detachWallpaper | setDetachWallpaper(boolean) | 是否在桌布上執行 |
android:duration | setDuration(long) | 動畫持續時間,毫秒為單位 |
android:fillAfter | setFillAfter(boolean) | 控制元件動畫結束時是否保持動畫最後的狀態 |
android:fillBefore | setFillBefore(boolean) | 控制元件動畫結束時是否還原到開始動畫前的狀態 |
android:fillEnabled | setFillEnabled(boolean) | 與android:fillBefore效果相同 |
android:interpolator | setInterpolator(Interpolator) | 設定插值器(指定的動畫效果,譬如回彈等) |
android:repeatCount | setRepeatCount(int) | 重複次數 |
android:repeatMode | setRepeatMode(int) | 重複型別有兩個值,reverse表示倒序回放,restart表示從頭播放 |
android:startOffset | setStartOffset(long) | 呼叫start函式之後等待開始執行的時間,單位為毫秒 |
android:zAdjustment | setZAdjustment(int) | 表示被設定動畫的內容執行時在Z軸上的位置(top/bottom/normal),預設為normal |
Alpha動畫屬性
xml屬性 | java方法 | 解釋 |
---|---|---|
android:fromAlpha | AlphaAnimation(float fromAlpha, …) | 動畫開始的透明度(0.0到1.0,0.0是全透明,1.0是不透明) |
android:toAlpha | AlphaAnimation(…, float toAlpha) | 動畫結束的透明度,同上 |
Rotate動畫屬性
xml屬性 | java方法 | 解釋 |
---|---|---|
android:fromDegrees | RotateAnimation(float fromDegrees, …) | 旋轉開始角度,正代表順時針度數,負代表逆時針度數 |
android:toDegrees | RotateAnimation(…, float toDegrees, …) | 旋轉結束角度,正代表順時針度數,負代表逆時針度數 |
android:pivotX | RotateAnimation(…, float pivotX, …) | 旋轉起點X座標(數值、百分數、百分數p,譬如50表示以當前View左上角座標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控制元件寬高的50%做為初始點) |
android:pivotY | RotateAnimation(…, float pivotY) | 縮放起點Y座標,同上規律 |
RotateAnimation rotate = new RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,int pivotYType);預設ABSOLUTE
RotateAnimation rotate = new RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue);
引數1:旋轉開始角度;引數2:旋轉的結束角度;引數3:X軸的旋轉模式,可取值ABSOLUTE 、RELATIVE_TO_SELF、RELATIVE_TO_PARENT;引數4:X座標的伸縮值;引數5:Y軸的旋轉模式,可取值ABSOLUTE 、RELATIVE_TO_SELF、RELATIVE_TO_PARENT;引數6:Y座標的伸縮值。
Scale動畫屬性
xml屬性 | java方法 | 解釋 |
---|---|---|
android:fromXScale | ScaleAnimation(float fromX, …) | 初始X軸縮放比例,1.0表示無變化 |
android:toXScale | ScaleAnimation(…, float toX, …) | 結束X軸縮放比例 |
android:fromYScale | ScaleAnimation(…, float fromY, …) | 初始Y軸縮放比例 |
android:toYScale | ScaleAnimation(…, float toY, …) | 結束Y軸縮放比例 |
android:pivotX | ScaleAnimation(…, float pivotX, …) | 縮放起點X軸座標(數值、百分數、百分數p,譬如50表示以當前View左上角座標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控制元件寬高的50%做為初始點) |
android:pivotY | ScaleAnimation(…, float pivotY) | 縮放起點Y軸座標,同上規律 |
ScaleAnimation scale = new ScaleAnimation(float fromX,float toX,float fromY,float toY,float pivotX,float pivotY) ;
ScaleAnimation scale = new ScaleAnimation(float fromX,float toX,float fromY,float toY,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue) ;
引數1:起始X軸方向上的大小,取值0-1;引數2:結束X軸方向上的大小,取值0-1;引數3:起始Y軸方向上的大小,取值0-1;引數4:結束Y軸方向上的大小;引數5:X軸的縮放模式,RELATIVE_TO_SELEF以自己為標準、RELATIVE_TO_PARENT以父元件為標準、ABSOLUTE表示絕對位置;引數6:針對前一個引數的值,取值0-1之間;引數7和8同之前。
例:ScaleAnimation scale = new ScaleAnimation(1f,0f,1f,0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f) ;
Translate動畫屬性
xml屬性 | java方法 | 解釋 |
---|---|---|
android:fromXDelta | TranslateAnimation(float fromXDelta, …) | 起始點X軸座標(數值、百分數、百分數p,譬如50表示以當前View左上角座標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控制元件寬高的50%做為初始點) |
android:fromYDelta | TranslateAnimation(…, float fromYDelta, …) | 起始點Y軸從標,同上規律 |
android:toXDelta | TranslateAnimation(…, float toXDelta, …) | 結束點X軸座標,同上規律 |
android:toYDelta | TranslateAnimation(…, float toYDelta) | 結束點Y軸座標,同上規律 |
Animation類的方法 | 解釋 |
---|---|
reset() | 重置Animation的初始化 |
cancel() | 取消Animation動畫 |
start() | 開始Animation動畫 |
setAnimationListener(AnimationListener listener) | 給當前Animation設定動畫監聽 |
hasStarted() | 判斷當前Animation是否開始 |
hasEnded() | 判斷當前Animation是否結束 |
View類的常用動畫操作方法 | 解釋 |
---|---|
startAnimation(Animation animation) | 對當前View開始設定的Animation動畫 |
clearAnimation() | 取消當View在執行的Animation動畫 |
Drawable動畫
Drawable動畫就是Frame動畫,它允許你實現像播放幻燈片一樣的效果,這種動畫的實質是Drawable,所以定義在res/drawable目錄下。
xml和java程式碼都能實現
xml中使用:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > true:表示執行一次,false:表示玄幻執行 item:類似一幀的動畫資源 <item android:drawable="" android:duration=""></item>drawable:一個frame的Drawable資源;duration:一個frame顯示多長時間 </animation-list>AnimationDrawable的start()方法不能再Activity的onCreate方法中呼叫,因為AnimationDrawable還未完全附著到Window上,所以最好的呼叫時機是onWindowFocusChanged()方法中
mIvAnim.setBackgroundResource(R.drawable.drawable_anim); AnimationDrawable drawable = (AnimationDrawable) mIvAnim.getBackground(); drawable.start();