1. 程式人生 > >Android View動畫(檢視動畫)

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) 動畫結束的透明度,同上
AlphaAnimation alpha = new AlphaAnimation(float fromAlpha,float toAlpha)  兩個引數,第一個引數是透明度起始值,第二個引數是透明度結束值。取值在0-1之間。

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);預設pivotX/pivotY (0,0)以最左上角為軸進行旋轉

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) ;

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類的方法
Animation類的方法 解釋
reset() 重置Animation的初始化
cancel() 取消Animation動畫
start() 開始Animation動畫
setAnimationListener(AnimationListener listener) 給當前Animation設定動畫監聽
hasStarted() 判斷當前Animation是否開始
hasEnded() 判斷當前Animation是否結束
補間動畫只能給View使用,View中也有和動畫相關的方法
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();