Android 之 TranslateAnimation類:位移動畫類

林蛋凡發表於2015-03-14

Android中提供了4中動畫:

AlphaAnimation 透明度動畫
ScaleAnimation 縮放動畫
TranslateAnimation 位移動畫
RotateAnimation 旋轉動畫

因為這次有使用到TranslateAnimation,所以這次先講TranslateAnimation。


android.view.animation
類 TranslateAnimation
java.lang.Object
這裡寫圖片描述android.view.animation.Animation
這裡寫圖片描述android.view.animation.TranslateAnimation
所有已實現的介面: Cloneable


欄位

從類 android.view.animation.Animation 繼承的欄位

ABSOLUTE構造中的引數,絕對座標
INFINITEsetRepeatCount(int)的傳入引數,值為-1 即是無限次的
RELATIVE_TO_PARENT構造中的引數,相對於父控制元件身的座標
RELATIVE_TO_SELF構造中的引數,相對於自身的座標
RESTARTsetRepeatMode(int)的傳入引數,如果有重複的話,重新播放
REVERSEsetRepeatMode(int)的傳入引數,如果有重複的話,反向播放
START_ON_FIRST_FRAMEsetStartTime(long startTimeMillis)的傳入引數,在第一次呼叫getTransformation啟動動畫
ZORDER_BOTTOMsetAnimation()的引數,在動畫播放期間,強制把當前播放的內容放到其他內容之下
ZORDER_NORMALsetAnimation()的引數,正在播放的動畫內容保持當前的Z軸順序
ZORDER_TOPsetAnimation()的引數,在動畫播放期間,強制把當前播放的內容放到其他內容的上面

構造方法

TranslateAnimation(Context context, AttributeSet attrs)
Constructor used when a TranslateAnimation is loaded from a resource.

TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
Constructor to use when building a TranslateAnimation from code

TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
Constructor to use when building a TranslateAnimation from code

我們比較常用的是後面兩個構造方法,現在我們來分析下構造方法

  1. TranslateAnimation(Context context, AttributeSet attrs) 繼承的構造

    • 引數context: 上下文環境
    • 引數attrs:自定義屬性
    • 構造用途:從XML中構建TranslateAnimation
  2. TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

    • 引數fromXDelta:位置變化的起始點X座標。
    • 引數toXDelta:位置變化的結束點X座標。
    • 引數fromYDelta:位置變化的起始點Y座標。
    • 引數toYDelta:位置變化的結束點Y座標。
    • 構造用途:定義一個從起始座標XY開始到 結束點XY的 TranslateAnimation
  3. TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

    • 引數fromXType:開始時x軸相對於元件的位置型別。
    • 引數fromXValue:開始時x軸的座標。根據fromXType代表不同的意義。
    • 引數toXType:結束時x軸相對於元件的位置型別。
    • 引數toXValue:結束時x軸的座標。根據toXType代表不同的意義。
    • 引數fromYType:開始時y軸相對於元件的位置型別。
    • 引數fromYValue:開始時y軸的座標。根據fromYType代表不同的意義。
    • 引數toYType:結束時y軸相對於元件的位置型別。
    • 引數toYValue:結束時y軸的座標。根據toYType代表不同的意義。
    • 構造用途:相比第二的構造,這個構造更加自定義,不在是固定的位置屬性

方法

從類 android.view.animation.Animation 繼承的公有方法

  1. void cancel()
    • 作用:取消這個動畫
  2. long computeDurationHint()
    • 返回值:計算一個動畫的持續時間,返回一個以毫秒為單位的資料
  3. int getBackgroundColor()
    • 返回值:這個動畫的背景顏色
  4. boolean getDetachWallpaper()
    • 返回值: 這個動畫是否脫離桌布執行的boolean值
  5. long getDuration()
    • 返回值:這個動畫應該持續的時間
  6. boolean getFillAfter()
    • 返回值: 這個動畫結束時畫面是否停留在最後一幀 的boolean值
  7. boolean fillBefore()
    • 返回值: 這個動畫結束時畫面是否停留在第一幀 的boolean值
  8. Interpolator getInterpolator()
    • 返回值: 此動畫的插值器型別
  9. int getRepeatCount()
    • 返回值: 動畫要重複多少次
  10. int getRepeatMode()
    • 返回值:動畫要重複的模式,例如重新開始,反向開始
  11. long getStartOffset()
    • 返回值:這個動畫在呼叫start方法後延遲了多久才啟動
  12. long getStartTime()
    • 返回值:這個動畫呼叫start方法的時間
  13. boolean getTransformation(long currentTime, Transformation outTransformation, float scale)
    • 引數currentTime:傳入某個動畫時間
    • 引數outTransformation:獲取傳入時間點的變形的原始資料物件
    • 引數scale:縮放比例
    • 返回值:如果當前這個動畫時間動畫還在執行則返回true
  14. boolean getTransformation(long currentTime, Transformation outTransformation)
    • 引數currentTime:傳入某個動畫時間
    • 引數outTransformation:獲取傳入時間點的變形的原始資料物件
    • 返回值:如果當前這個動畫時間動畫還在執行則返回true
  15. int getZAdjustment()
    • 返回值:Animation在Z軸方向的順序
  16. boolean hasEnded()
    • 返回值:動畫是否已經結束
  17. boolean hasStarted()
    • 返回值:動畫是否已經開始
  18. void initialize(int width, int height, int parentWidth, int parentHeight)
    • 引數width:動畫物件的寬
    • 引數height:動畫物件的高
    • 引數parentWidth:父控制元件的寬
    • 引數parentWidth:父控制元件的高
    • 作用:初始化動畫物件以及父控制元件尺寸。
  19. boolean isFillEnabled()
    • 返回值:當前動畫的使能填充屬性。當該屬性為true時,將執行setFillBefore和setFillAfter方法,否則將忽略setFillBefore和setFillAfter方法。
  20. boolean isInitialized()
    • 返回值:如果動畫已經初始化 則返回true
  21. void reset()
    • 作用:重置動畫到初始化狀態
  22. void restrictDuration (long durationMillis)
    • 引數durationMillis:最大允許動畫持續時間
    • 作用:調整動畫持續時間,確保了重複執行,也不會持續的比給定的時間更長。
  23. void scaleCurrentDuration (float scale)
    • 引數scale:縮放比例
    • 作用:按一定的比例放大持續時間
  24. void setAnimationListener(Animation.AnimationListener listener)
    • 引數listener:動畫監聽
    • 作用:給一個動畫設定監聽,設定類似偵聽動畫的開始或動畫重複的通知
  25. void setBackgroundColor(int bg)
    • 引數bg:Color的int值
    • 作用:設定動畫的背景顏色
  26. void setDetachWallpaper(boolean detachWallpaper)
    • 引數detachWallpaper:是否脫離桌布執行動畫
    • 作用:如果為true,這個動畫將會脫離背景執行,首先你要有個背景
  27. void setDuration(long durationMillis)
    • 引數durationMillis:動畫的持續時間
    • 作用:設定一個動畫的持續時間
  28. void setFillAfter(boolean fillAfter)
    • 引數fillAfter:動畫是否停留在最後一幀
    • 作用:設定動畫是否停留在最後一幀,為true則是停留在最後一幀
  29. void setFillBefore(boolean fillBefore)
    • 引數fillBefore:動畫是否停留在第一幀
    • 作用:設定動畫是否停留在第一幀,為true則是停留在第一幀
  30. void setFillEnabled(boolean fillEnabled)
    • 引數fillEnabled:動畫是否使能填充
    • 作用:設定動畫是否使能填充,為true將執行setFillBefore和setFillAfter方法,否則將忽略setFillBefore和setFillAfter方法。
  31. void setInterpolator(Context context, int resID)
    • 引數context:上下文環境
    • 引數resID:插值器R ID
    • 作用:設定動畫插值器屬性,使用XML設定
  32. void setInterpolator(Interpolator i)
    • 引數i:插值器
    • 作用:設定動畫插值器屬性,使用程式碼設定
  33. void setRepeatCount(int repeatCount)
    • 引數repeatCount:重複次數
    • 作用:設定動畫重複次數
  34. void setRepeatMode(int repeatMode)
    • 引數repeatMode:重複型別,例如 重頭開始,反向開始
    • 作用:設定動畫重複時候的模式
  35. void setStartOffset(long startOffset)
    • 引數startOffset:延遲時間
    • 作用:當呼叫start方法後延遲一定時間開始
  36. void setStartTime(long startTimeMillis)
    • 引數startTimeMillis:動畫開始時間
    • 作用:在特定的時間呼叫start方法
  37. void setZAdjustment(int zAdjustment)
    • 引數zAdjustment:Z軸方向的順序(TOP,NORMAL,BOTTOM)
    • 作用:調整播放內容在Z軸方向的順序
  38. void start()
    • 作用:第一次執行getTransformation方法的時候才會執行動畫
  39. void startNow()
    • 作用:執行動畫的主要方法,使用時需要先通過setAnimation方法為某一個View物件設定動畫.
  40. boolean willChangeBounds()
    • 返回值:判斷動畫是否會改變檢視的邊界,ture為會改變
  41. boolean willChangeTransformationMatrix ()
    • 返回值:判斷動畫是否會改變移動變換的矩陣,ture為會改變

從類 android.view.animation.Animation 繼承的受保護的方法

以下方法不可以被呼叫使用,只是簡單說明下是什麼

  1. void applyTransformation(float interpolatedTime, Transformation t)
    • 引數interpolatedTime:動畫進度時間值,取值範圍在[0.0f-1.0f]
    • 引數t:動畫某一幀中變形的原始資料
    • 作用:在自定義動畫類的時候都要重寫這個方法,主要作用是把一些屬性組裝成一個Transformation類,這個方法會被父類的getTransformation方法呼叫
  2. Animation clone ()
    • 返回值:此動畫物件的副本
  3. void ensureInterpolator ()
    • 作用:這個動畫有一個插值器
  4. void finalize ()
    • 作用:垃圾回收器要回收物件的時候,首先要呼叫這個類的finalize方法
  5. float getScaleFactor ()
    • 作用:返回每個類在動畫中的縮放比例因子
  6. float resolveSize (int type, float value, int size, int parentSize)
    • 引數type:動畫座標的型別
    • 引數value:動畫座標的值
    • 引數size:動畫物件的大小
    • 引數parentSize:動畫物件的父物件的大小
    • 返回值:返回動畫的尺寸

舉一個栗子

public class firstActivity extends Activity {   

@Override   
public void onCreate(Bundle savedInstanceState) {               //過載onCreate方法   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.main);   

    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView物件   
    Button btn1=(Button)findViewById(R.id.button1);             //按鈕物件   
    Button btn2=(Button)findViewById(R.id.button2);   
    final Animation translateAnimation=new TranslateAnimation(0,300,0,300);                                                                 //位置變化動畫效果   

    btn1.setOnClickListener(new View.OnClickListener() {            //設定監聽器   

        @Override   
        public void onClick(View v) {   
            // TODO Auto-generated method stub   
            translateAnimation.setDuration(3000);               //設定動畫持續時間   
            translateAnimation.setRepeatCount(2);               //設定重複次數   
            translateAnimation.setRepeatMode(Animation.REVERSE);    //反方向執行   
            image.setAnimation(translateAnimation);             //設定動畫效果   
            translateAnimation.startNow();                      //啟動動畫   
        }   
    });   
    btn2.setOnClickListener(new View.OnClickListener() {            //設定監聽器   

        @Override   
        public void onClick(View v) {   
            // TODO Auto-generated method stub   
            translateAnimation.cancel();                        //取消動畫執行   
        }   
    });   
}   

}   

在這段程式碼中,首先通過TranslateAnimation構造方法建立了一個位置變化的動畫物件。然後,在第一個按鈕監聽器中設定了動畫的持續時間、重複次數和重複模式等,然後啟動該動畫。在第二個按鈕監聽器中取消該動畫。讀者執行這段程式碼

相關文章