1. 程式人生 > >Android屬性動畫初探之ObjectAnimator

Android屬性動畫初探之ObjectAnimator

屬性動畫

ObjectAnimator

ObjectAnimator使用它的ofFloat方法,來構造一個屬性動畫

ObjectAnimator.ofFloat(Object target,String propName,float... valuse)
引數講解

Object traget: 表示需要執行動畫的目標類
String propName: 表示需要變化的屬性名稱;
float values :表示屬性變化的值得範圍

示例程式碼
ObjectAnimator.ofFloat(imageview,"translationX",0F,200F).setDuration(1000).start();

該段語句執行大概就是將 imageview這個物件向著X的方向從位置0移動到位置200,耗時1秒,

對於屬性名稱的書寫,只要是Google對控制元件可以通過get和set得到的屬性在這裡都可以進行操作,但是在這裡有幾個常用的屬性操作,介紹如下:
translationX/translationY: 沿著X軸/Y軸方向移動(指的是偏移量)
X/Y: 也是沿著X或者Y軸方向進行移動,但是區別是這裡指的是你移動的相對於座標的絕對值,也可以理解為移動到具體的座標點
rotation:設定旋轉屬性
scaleX/scaleY:設定X軸或者Y軸方向上的縮放屬性
alpha:設定透明度屬性

另外需要注意的是,ObjectAnimator在呼叫start方法開始動畫是一個非同步的過程,也就是說如果這裡我同時寫了三個動畫,呼叫start,會發現這三個動畫是同時執行的,並不是一個順序的執行過程,而如果需要按照特定的順序來執行某個複雜的動畫集合的話,這裡就需要用到 AnimatorSet物件,通過呼叫AnimatorSet物件的playSequentially(),來控制動畫的播放順序
AnimatorSet還提供playTogether()、with()、after()等一系列方法來控制動畫的播放順序,通過控制控制元件的單一屬性來操縱動畫,可以達到更加精確好看的動畫效果。

新增動畫的監聽事件

對屬性動畫新增監聽事件可以通過addListener(AnimatorListener)來實現,裡面有一系列的回撥方法,如start,end,cancel等等,但是在實際使用中,我們可能並不需要這麼多的事件回撥,所以一般都會通過addListener(AnimatorListenerAdapter)來選擇性的新增需要的回撥方法,特別的實用方便

部落格的最後以一個用屬性動畫來完成的自定義控制元件來作為結尾吧,這是一個彈出式的選單控制元件,最早出現在path應用上,來看看效果圖
Demo示例圖

最後的最後,附上Demo的Github地址,由於好久沒寫部落格了,這篇部落格也是倉促之下寫出來的,Demo中還有很多不足的地方,還望大家海涵