AnimatorSet和ObjectAnimator的結(jié)合使用

眾所周知琉朽,AnimatorSet是用來處理view的一系列動畫的集合毒租,允許對控件設(shè)置一系列的動畫。在AnimatorSet里可以指定動畫的播放順序箱叁、是否一起播放或者是否延遲播放墅垮。

向AnimatorSet添加動畫有兩種不同的方法,其一是調(diào)用playTogether()或playSequentially()方法來一次性添加一組動畫,其二是播放(Animator)可以與Builder類一個一個添加動畫耕漱。
注:在添加系列動畫時算色,一定要考慮到同時執(zhí)行的動畫之間是否會出現(xiàn)沖突。比如添加的動畫且同時執(zhí)行的孤个,一個向左移動剃允,另外一個向右移動,此時Android系統(tǒng)必然不知道如何處理齐鲤,這種小失誤應(yīng)該是規(guī)避的斥废。
這里要知道AnimatorSet.Builder這個內(nèi)部類是一個使用的動畫工具類,用于方便向AnimatorSet添加動畫以及設(shè)置各種動畫之間的關(guān)系给郊。在AnimatorSet.Builder中牡肉,共聲明了after(long)、after(Animator)淆九、before(Animator)统锤、with(Animator)等四個方法毛俏。

after(delay):設(shè)置動畫延遲delay時間后播放
after(anim):設(shè)置在anim動畫結(jié)束后播放此動畫
before(anim):設(shè)置此動畫早于anim播放
with(anim):設(shè)置此動畫與anim一起播放

與playTogether()和playSequentially()方法想比較,采用AnimatorSet.Builder向AnimatorSet逐一添加動畫饲窿,更能準確的知道動畫的播放順序煌寇。

示例:

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();

最終的動畫執(zhí)行順序是:

1,bounceAnim
2,squashAnim1與squashAnim2、stretchAnim1逾雄、stretchAnim2一起執(zhí)行
3,bounceBackAnim
4,fadeAnim

還有一些常用的方法:
play(Animator anim):添加一個動畫阀溶,并返回AnimatorSet.Builder
playSequentially(List items):添加一組動畫,播放順序為一步步播放
playSequentially(Animator… items):添加一組動畫鸦泳,播放順序為一步步播放
playTogether(Collection items):添加一組動畫银锻,播放順序為一起播放
playTogether(Animator… items):添加一組動畫,播放順序為一起播放

下面結(jié)合ObjectAnimator類來展示這些方法的執(zhí)行順序做鹰。

ObjectAnimator屬性動畫:直接動畫所給的對象,他會調(diào)用對象對應(yīng)屬性的get/set方法吧屬性的值設(shè)置給對象的屬性击纬,直接實現(xiàn)動畫效果。
ObjectAnimator的初始化也是通過一系列ofXXX()方法來進行钾麸,但是參數(shù)有所變化更振,他的這些方法都要求傳入一個Object對象,然后就會在這個對象上執(zhí)行動畫饭尝。
分析一下ofFloat(Object target, String propertyName, float... values)參數(shù):

參數(shù) 解釋
target 對象殃饿,一般就某個view,指定要改變誰的屬性 芋肠。
propertyName 屬性名,指定要改變對象的什么屬性遵蚜,這個屬性名要求在兌現(xiàn)中必須有對應(yīng)的public的PsetPropertyName的方法帖池。比如下面要講到的rotationX,rotaionY等等吭净。
values 一系列這個屬性將會到達的值睡汹。

這是propertyName的一些解釋和效果

ObjectAnimator第二個參數(shù)的屬性 對應(yīng)的set方法 效果
alpha public void setAlpha(float alpha) 改變透明度
translationX setTranslationX 沿X軸平移
translationY setTranslationY 沿Y軸平移Y
scaleX setScaleX 沿X軸縮放
scaleY setScaleY 沿Y軸縮放
rotationX setRotationX 繞X軸旋轉(zhuǎn)
rotationY setRotationY 繞Y軸旋轉(zhuǎn)
rotation setRotation 繞Z軸旋轉(zhuǎn)

下面是動畫的實現(xiàn)

   /**
     * 光效 沿x軸翻轉(zhuǎn)
     * @return
     */
    public ObjectAnimator buildCoverLightrotationX(){
         //0,為初始狀態(tài), -20為角度寂殉,中間變化值囚巴。-50為角度是最終動畫截止角度
         return ObjectAnimator.ofFloat(mBoxLight, "rotationX", 0, -20, -50).setDuration(TIME_TRANSLATE_DURATION);
    }

    
    /**
     * 光效 漸變
     * @return
     */
    public ObjectAnimator buildCoverLightAlpha(){
        return ObjectAnimator.ofFloat(mBoxLight, "alpha", 0.2f, 1, 0).setDuration(TIME_TRANSLATE_DURATION);
    }

      /**
         * 半打開
         *
         * @return
         */
        public ObjectAnimator buildCoverHalfOn() {
            final float halfHeight = mBoxcover.getHeight() * 0.4f;
            return ObjectAnimator.ofFloat(mBoxcover, "translationY", 0, halfHeight, halfHeight)
                    .setDuration(TIME_TRANSLATE_DURATION);
        }


      /**
         * 光效 滑到一半
         * @return
         */
        public ObjectAnimator buildCoverLightHalfOn() {
            final float fullHeight = mBoxcover.getHeight() * 0.4f;
            return ObjectAnimator.ofFloat(mBoxLight, "translationY", 0, fullHeight, fullHeight)
                    .setDuration(TIME_TRANSLATE_DURATION);
        }

然后是對這些動畫的一并播放

 AnimatorSet set = new AnimatorSet();
ObjectAnimator coverAnim = mAnimationControler.buildCoverHalfOn();
ObjectAnimator lightMoveY = lightMoveY = mAnimationControler.buildCoverLightHalfOn();
ObjectAnimator lightMoveX = mAnimationControler.buildCoverLightrotationX();
ObjectAnimator lightAlpha = mAnimationControler.buildCoverLightAlpha();
coverAnim.setDuration(TIME_TRANSLATE_DURATION);
set.playTogether(coverAnim, lightMoveX, lightAlpha, lightMoveY);

最終的效果圖是這樣子的。界面方面的就不講了友扰。

1.gif

playSequentially方法其實就是動畫一個個播放彤叉,這里由于效果不好看所以就不展示啦,哈哈哈村怪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秽浇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甚负,更是在濱河造成了極大的恐慌柬焕,老刑警劉巖审残,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斑举,居然都是意外死亡搅轿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門富玷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來璧坟,“玉大人,你說我怎么就攤上這事凌彬》腥幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵铲敛,是天一觀的道長褐澎。 經(jīng)常有香客問我,道長伐蒋,這世上最難降的妖魔是什么工三? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮先鱼,結(jié)果婚禮上俭正,老公的妹妹穿的比我還像新娘。我一直安慰自己焙畔,他們只是感情好掸读,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宏多,像睡著了一般儿惫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伸但,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天肾请,我揣著相機與錄音,去河邊找鬼更胖。 笑死铛铁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的却妨。 我是一名探鬼主播饵逐,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彪标!你這毒婦竟也來了梳毙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤捐下,失蹤者是張志新(化名)和其女友劉穎账锹,沒想到半個月后萌业,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡奸柬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年生年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廓奕。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抱婉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桌粉,到底是詐尸還是另有隱情蒸绩,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布铃肯,位于F島的核電站患亿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏押逼。R本人自食惡果不足惜步藕,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挑格。 院中可真熱鬧咙冗,春花似錦、人聲如沸漂彤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挫望。三九已至仪或,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間士骤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工蕾域, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拷肌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓旨巷,卻偏偏與公主長得像巨缘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子采呐,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容