API 25 (Android 7.1.1 API) animation.AnimatorSet



Android API 25(Andrid 7.1.1)


AnimatorSet

public final class AnimatorSet

extends Animator

Added in API level 11

 

java.lang.Object

   ↳ android.animation.Animator

     ↳ android.animation.AnimatorSet

 

【概述】

這個類按指定的順序播放一組Animator對象。動畫可以設置爲一起播放,按順序播放,或在指定的延遲後播放。

 

AnimatorSet添加動畫有兩種不同的方法:可以調用playTogether()playSequentially()方法一次添加一組動畫,或者play(Animator)可以與Builder類一個一個添加動畫。

 

可以在其動畫之間設置具有循環依賴性的AnimatorSet。例如,動畫a1可以被設置爲在動畫a2之前開始,在a3之前的a2,以及在a1之前的a3。此配置的結果未定義,但通常不會導致播放受影響的動畫。由於這一點(並且因爲循環依賴性不會使邏輯意義),應當避免循環依賴性,並且動畫的依賴性流程應該只在一個方向。

 

開發人員指南

有關使用AnimatorSet動畫製作的更多信息,請閱讀屬性動畫開發人員指南。

 

【內部類】

AnimatorSet.Builder

Builder對象是一個實用程序類,用於方便向AnimatorSet添加動畫以及各種動畫之間的關係。

 

【公共構造函數】

AnimatorSer()

 

【公共方法】

getDuration

long getDuration ()

API 11

獲取此AnimatorSet的每個子動畫的長度。 該值可以小於0,這指示在該AnimatorSet上沒有設置持續時間,並且每個子動畫將使用它們自己的持續時間。

 

setDuration

Animator setDuration (long duration)

API 11

設置動畫的持續時間。

設置此AnimatorSet的每個當前子動畫的長度。 默認情況下,每個子動畫將使用自己的持續時間。 如果在AnimatorSet上設置持續時間,則每個子動畫都會繼承此持續時間。

getTotalDuration

long getTotalDuration ()

API 24

獲取動畫的總持續時間,考慮動畫序列,開始延遲和重複。 如果持續時間爲無限,則返回DURATION_INFINITE

 

getInterpolator

TimeInterpolator getInterpolator ()

API 18

返回此動畫使用的時間插值器。

 

setInterpolator

void setInterpolator (TimeInterpolator value)

API 11

爲此AnimatorSet的所有當前子動畫設置TimeInterpolator。 默認值爲null,這意味着在此AnimatorSet上沒有設置插值器。 將內插器設置爲任何非空值將導致在集合啓動時在子動畫上設置內插器。

 

getStartDelay

long getStartDelay ()

API 11

調用start()之後延遲處理動畫的時間(以毫秒爲單位)。

 

setStartDelay

void setStartDelay (long startDelay)

API 11

調用start()之後延遲啓動動畫的時間(以毫秒爲單位)。

注意,啓動延遲應始終爲非負。 任何負啓動延遲將在N及以上版本時強制爲0

 

isStarted

boolean isStarted ()

API 14

返回此Animator是否已啓動且尚未結束。

對於可重複使用的Animator(除了通過createCircularReveal()生成的一次性Animator之外,大多數Animator,這個狀態是isRunning()的超集,因爲具有非零startDelayAnimator在延遲期間將返回isStarted 相位,而isRunning()將只有在延遲階段完成後纔會返回true。 不可重複使用的動畫器在啓動後總是返回true,因爲它們不能返回到非啓動狀態。

 

isRunning

boolean isRunning ()

API 11

如果此AnimatorSet的任何子動畫已啓動且尚未結束,則返回true。 直到AnimatorSet通過setStartDelaylong)超過其初始延遲集才啓動子動畫。

 

isPaused

boolean isPaused ()

API 19

返回此Animator當前是否處於暫停狀態。

 

start

void start ()

API 11

開始本動畫。 如果動畫具有非零的startDelay,則動畫將在延遲結束後開始運行。 非延遲動畫將立即設置其初始值,然後調用onAnimationStart(Animator)用於此Animator的任何監聽器。

通過調用此方法開始的動畫將在調用此方法的線程上運行。 這個線程應該有一個Looper(如果不是這種情況,會拋出一個運行時異常)。 此外,如果動畫將對視圖層次結構中對象的屬性進行動畫處理,則調用線程應該是該視圖層次結構的UI線程。

 

pause

void pause ()

API 19

暫停正在運行的動畫。 此方法應該只在動畫開始的同一個線程上調用。 如果動畫尚未開始或者已經結束,則忽略該調用。 暫停的動畫可以通過調用resume()恢復。

 

resume

void resume ()

API 19

恢復已暫停的動畫,使 animator在暫停時從中斷的位置繼續。 此方法應該只在動畫開始的同一個線程上調用。 對當前未暫停的animatorresume()調用將被忽略。

 

cancel

void cancel ()

API 11

取消動畫。 end()不同,cancel()使動畫在其軌道中停止,向其偵聽器發送onAnimationCancel(Animator),然後是

onAnimationEnd(Animator)消息。

必須在運行動畫的線程上調用此方法。

注意,取消AnimatorSet也會取消它所負責的所有動畫。

 

end

void end ()

API 11

結束動畫。 這將導致動畫分配正在動畫屬性的結束值,然後在其偵聽器上調用onAnimationEnd(Animator)方法。

必須在運行動畫的線程上調用此方法。

注意,結束AnimatorSet也會結束它所負責的所有動畫。

 

clone

Animator clone ()

API 11

創建並返回此對象的副本。

 

“複製”的精確含義可以取決於對象的類。 一般的意圖是,對於任何對象x,表達式:

 x.clone() != x

將是真實的,並且表達式:

 x.clone().getClass() == x.getClass()

將是真的,但這些不是絕對的要求。 雖然通常的情況是:

 x.clone().equals(x)

將是真的,這不是絕對的要求。

按照慣例,返回的對象應該通過調用super.clone獲得。 如果一個類及其所有的超類(除了Object)遵循這個約定,將會是 x.clone().getClass() == x.getClass().

 

按照慣例,此方法返回的對象應該獨立於此對象(正在克隆)。爲了實現這種獨立性,可能需要在返回super.clone之前修改該對象的一個或多個字段。通常,這意味着複製包含正在克隆的對象的內部“深層結構”的任何可變對象,並使用對副本的引用替換對這些對象的引用。如果類只包含基本字段或對不可變對象的引用,則通常情況下,super.clone返回的對象中沒有字段需要修改。

 

Object的方法克隆執行特定的克隆操作。首先,如果此對象的類未實現接口Cloneable,則會拋出CloneNotSupportedException。注意,所有數組都被認爲實現了Cloneable接口,並且數組類型T []clone方法的返回類型是T [],其中T是任何引用或原始類型。否則,此方法將創建此對象的類的一個新實例,並使用此對象的相應字段的內容(如通過賦值)完全初始化其所有字段;字段的內容本身不被克隆。因此,該方法執行該對象的“淺拷貝”,而不是“深拷貝”操作。

 

Object本身不實現接口Cloneable,因此在類爲Object的對象上調用clone方法將導致在運行時拋出異常。

 

setTarget

void setTarget (Object target)

API 11

設置其屬性將由此動畫進行動畫處理的目標對象。 不是所有的子類都對目標對象進行操作(例如,ValueAnimator,但是這個方法在超類上,爲的是方便地處理那些處理目標的子類。

 

注意:目標作爲弱引用存儲在內部,以避免由於動畫師直接引用舊目標而導致的資源泄露。 因此,您應該確保animator目標總是在其他地方有一個硬引用。

 

setupEndValues

void setupEndValues ()

API 11

此方法告訴對象使用適當的信息來提取動畫的結束值。 例如,

AnimatorSet對象將該調用傳遞給它的子對象,以告訴他們設置值。

ObjectAnimator對象將使用其有關其目標對象和PropertyValuesHolder對象的信息來獲取其屬性的結束值。

ValueAnimator對象將忽略該請求,因爲它沒有足夠的信息(例如目標對象)來收集這些值。

 

setupStartValues

void setupStartValues ()

API 11

此方法告訴對象使用適當的信息來提取動畫的起始值。 例如,

AnimatorSet對象將該調用傳遞給它的子對象,以告訴他們設置值。

ObjectAnimator對象將使用其有關其目標對象和PropertyValuesHolder對象的信息來獲取其屬性的起始值。

ValueAnimator對象將忽略該請求,因爲它沒有足夠的信息(例如目標對象)來收集這些值。

 

getChildAnimations

ArrayList<Animator> getChildAnimations ()

API 11

返回此AnimatorSet控制的子Animator對象的當前列表。 這是內部列表的副本; 對返回的列表的修改不會影響AnimatorSet,但是對底層Animator對象的更改將影響由AnimatorSet管理的那些對象。

 

play

AnimatorSet.Builder play (Animator anim)

API 11

此方法創建一個Builder對象,用於設置播放約束。 這個初始play()方法告訴Builder這個動畫是後續命令對Builder的依賴。 例如,調用play(a1).with(a2)設置AnimatorSet同時播放a1a2play(a1).before(a2)設置AnimatorSet先播放a1,接着a2play(a1).after(a2) 設置AnimatorSet先播放a2,然後a1

 

注意,play()是告訴Builder生成依賴關係的動畫的唯一方法,所以對Builder中的各種函數的連續調用都將引用play()中提供的初始參數作爲其他動畫的依賴 。 例如,當a1結束時,調用play(a1).before(a2).before(a3)將同時播放a2a3; 它不設置a2a3之間的依賴關係。

 

playSequentially

void playSequentially (List<Animator> items)

void playSequentially (Animator... items)

API 11

設置此AnimatorSet以在上一個動畫結束時播放每個提供的動畫。

 

playTogether

void playTogether (Collection<Animator> items)

void playTogether (Animator... items)

API 11

設置此AnimatorSet以同時播放所有提供的動畫。

這等效於用集合中的第一動畫製作者調用play(Animator),然後用每個其他動畫製作者調用with(Animator)。 注意,具有startDelayAnimator實際上不會啓動,直到該延遲過去,這意味着如果提供給此構造函數的列表中的第一個動畫製作者具有startDelay,則在第一個動畫製作者的startDelay過去之前,其他動畫製作者都不會開始。

 

toString

String toString ()

API 11

返回對象的字符串表示形式。 一般來說,toString方法返回一個“文本表示”此對象的字符串。 結果應該是一個簡單但翔實的表示,是一個人很容易閱讀。 建議所有子類覆蓋此方法。

 

ObjecttoString方法返回一個字符串,其中包含對象是實例的類的名稱,符號字符“@”以及對象的哈希碼的無符號十六進制表示。 換句話說,此方法返回一個等於以下值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章