Animator
概覽
這是一個(gè)為可以被啟動(dòng)、終結(jié)以及附帶動(dòng)畫監(jiān)聽器的動(dòng)畫提供基本支持的類的父類。
內(nèi)部類
- 接口Animator.AnimatorListener
該監(jiān)聽器用于接收動(dòng)畫發(fā)出通知。 - 接口Animator.AnimatorPauseListener
該監(jiān)聽器用于接收當(dāng)動(dòng)畫暫停或者恢復(fù)時(shí)發(fā)出的通知。
構(gòu)造方法
Animator()
AnimatorSet
概覽
這個(gè)類用于將一個(gè)動(dòng)畫集合按特定的順序播放。動(dòng)畫可以設(shè)置成同時(shí)播放、順序播放或者在一定的延時(shí)后播放。
有兩種方式可以向AnimatorSet添加動(dòng)畫:
- 調(diào)用playTogether()或者playSequentially()一次性地添加并播放動(dòng)畫。
- 使用play(Animator)與Builder類中的方法,逐個(gè)添加并播放動(dòng)畫。
另外,可以建立一個(gè)動(dòng)畫之間循環(huán)依賴的AnimatorSet.比如,有動(dòng)畫A1,A2和A3,A1在A2前啟動(dòng),A2在A3前啟動(dòng),A3則在A1千啟動(dòng)。
內(nèi)部類Builder
該類是一個(gè)工具類,用于為AnimatorSet添加動(dòng)畫,同時(shí)為不同的動(dòng)畫間添加聯(lián)系。該類的方法的目的是為了表達(dá)動(dòng)畫間的依賴關(guān)系時(shí)更加人性化。在滿足需求的前提下,開發(fā)者也可以使用playTogether()和playSequentially()方法。但在一些情況下,使用Builder類更方便。
Builder對(duì)象不能直接建立,而是通過paly(Animator)。
比如,設(shè)置一個(gè)AnimatorSet將動(dòng)畫1和動(dòng)畫2同時(shí)播放,動(dòng)畫3在動(dòng)畫2結(jié)束后播放,動(dòng)畫4則在動(dòng)畫3結(jié)束后播放:
AnimatorSet s = new AnimatorSet();
s.play(anim1).with(anim2);
s.play(anim2).before(anim3);
s.play(anim4).after(anim3);
AnimatorSet代碼示例
AnimatorSet set = new AnimatorSet();
set.playSequentially(downAnim, stretchAnim, upAnim);
set.start();
s.play(anim4).after(anim3);
ValueAnimator
概覽
該類為播放動(dòng)畫提供了簡(jiǎn)單的時(shí)間引擎,該引擎可以計(jì)算動(dòng)畫時(shí)間并將其設(shè)置在目標(biāo)對(duì)象上。
所有的動(dòng)畫可以使用單個(gè)時(shí)間脈沖。存在處理器(handler)中的時(shí)間脈沖可以確保屬性在UI線程中改變。
默認(rèn)情況下,ValueAnimator使用非線性時(shí)間的插值,該插值由類AccelerateDecelerateInterpolator實(shí)現(xiàn),實(shí)現(xiàn)方法為setInterpolator(TimeInterpolator)。
Animators可以通過代碼或者資源文件建立。下面是一個(gè)ValueAnimator的資源文件示例:
<animator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType"
android:repeatCount="1"
android:repeatMode="reverse"/>
ValueAnimator須配合監(jiān)聽器使用,并通過監(jiān)聽器的方法對(duì)目標(biāo)對(duì)象進(jìn)行更新。