Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android屬性動畫---Property Animation(四)

Android屬性動畫---Property Animation(四)

編輯:關於Android編程

用ValueAnimator來制作動畫

ValueAnimator類通過設定動畫過程中的int、float或顏色值,來指定動畫播放期間的某些類型的動畫值。通過ValueAnimator類的一個工廠方法來獲取一個ValueAnimator對象:ofInt()、ofFloat()、ofObject()。例如:

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);

animation.setDuration(1000);

animation.start();

在這段代碼中,當start()方法開始執行時,ValueAnimator對象會在1000毫秒的動畫期間內,在0和1之間開始計算動畫的值。

還可以通過下面的做法來指定自定義的動畫類型:

ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);

animation.setDuration(1000);

animation.start();

在這段代碼中,在start()方法開始執行的時候,ValueAnimator對象會在1000毫秒的動畫期間內,使用由MyTypeEvaluator對象提供的邏輯,在startPropertyValue和endPropertyValue之間,開始計算動畫的值。

但是,在前一個代碼片段中,不會對一個對象形成實際的影響,因為ValueAnimator對象沒有直接在對象或屬性上執行操作。這麼做的最大可能是用這些計算值來修改那些想要動畫效果的對象。通過定義ValueAnimator類中響應的事件監聽器,來處理動畫執行期間的重要事件,如幀更新等。當監聽器執行的時候,就能夠通過調用getAnimateValue()方法獲得指定幀的刷新的計算值。有關監聽器的更多信息,請看“動畫監聽器”。

用ObjectAnimator來制作動畫

ObjectAnimator類是ValueAnimator類的一個子類,並且把時序引擎和ValueAnimator對象的計算值組合到一起,讓目標對象的命名屬性具備動畫能力。這樣使得讓任意對象具有動畫效果變的更加容易,如不在需要實現ValueAnimator.AnimatorUpdateListener接口,因為被動畫的屬性會自動的更新。

實例化一個ObjectAnimator對象與實例化一個ValueAnimator對象類似,但是,它還需要跟動畫期間的參數一起,指定動畫對象和對象動畫屬性(用一個字符串)的名字:

ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);

anim.setDuration(1000);

anim.start();

要正確的更新ObjectAnimator對象的屬性,必須做以下事情:

1. 動畫效果的屬性必須有一個set<propertyName>格式的設置器方法。因為在動畫處理期間,ObjectAnimator對象會自動的更新對應的動畫效果屬性,所以它必須使用這個設置器方法來訪問對應的屬性。例如,如果屬性名是foo,那麼就需要有一個setFoo()方法,如果這個設置器方法不存在,你有三種選擇:

   A. 如果你權利這麼做,就要在這個類中添加設置器方法;

   B. 使用一個你有權改變的包裝器類,並且這個包裝器能夠用一個有效的設置方法來接收動畫值,而且還要能夠把這個值轉發給初始對象。

   C. 使用ValueAnimator類來代替。

2.  如果你只在ObjectAnimator類的一個工廠方法中指定了一個values…參數,那麼該值會被假定為動畫的結束值。因此,該對象的動畫效果屬性就必須要有一個獲取方法,用於獲得動畫的開始值。這個獲取方法必須使用get<propertyName>()格式。例如,屬性是foo,就必須有一個getFoo方法。

3.  動畫屬性的獲取(如果需要)和設置方法必須操作相同類型的指定給ObjectAnimator對象開始和結束值。例如,如果構建一個下面這樣的ObjectAnimator對象,就必須要有targetObejct.setPropName(float)和targetObject.getPropName(float)方法:

ObjectAnimator.ofFloat(targetObject,"propName",1f)4.  根據屬性或對象上的動畫效果,可能需要調用View對象上的invalidate()方法,在更新動畫效果時,強制屏幕重繪自己。在onAnimationUpdate()回調方法中做這件事情。例如,一個繪圖對象的顏色屬性的動畫效果,在隊形重繪自己時,才會將變化結果更新到屏幕上。在View對象上的所有的屬性的設置器,如setAlpha()和setTranslationX()會正確的讓View對象失效,因此在調用這些方法設置新的值時候,你不需做失效這件事。有關監聽器的更多信息,請看“動畫監聽器”。

 作者:FireOfStar
 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved