Object Animator和Tween Animation

關於安卓的動畫。
分類就不詳敘了,以前我只知道Frame動畫、Tween動畫,還耳聞過屬性動畫,但因爲一直沒用到動畫,所以沒去研究。
目前項目中涉及到了動畫,所以做了個簡單的總結,主要針對於Object Animator和Tween Animation的區別。
其實要實現的效果也很簡單,無非就是Alpha(透明度)、Translate(位移)、Rotate(旋轉)、Scale(放縮),
拿簡單的Translate(位移)來舉例:
至於爲什麼拿位移動畫來舉例,因爲它的特殊性,後面會說到。

(1).Tween Animation是這麼寫的:

                //聲明一個位移動畫,並賦值 X軸從0 -> -50 , Y軸從 0到 600. 
                Animation mTranslate = new TranslateAnimation(0, -50, 0, 600);
                //動畫時間設置爲2秒
                mTranslate.setDuration(2000);
                //Interpolator的效果百度一查一大堆,就不說了,就是加速啊,減速啊,反彈啊之類的效果
                mTranslate.setInterpolator(new BounceInterpolator());
                //給View(一般來說是控件)設置上剛纔定義的位移動畫
                View.startAnimation(mTranslate);

效果就是從View的原位置斜向下位移(帶BounceInterpolator效果,反彈三次後靜止),


(2).Object Animator是這麼寫的:

                //聲明一個屬性動畫,並賦值,注意,View是在這裏被當做參數賦值的
                //同時要注意的是translationY,這個參數可以替換爲其他效果,rotateY、rotateX啊等等
                Animator mAnimator = ObjectAnimator.ofFloat(view, "translationY", 0, 600);
                mAnimator.setDuration(2000);
                mAnimator.setInterpolator(new BounceInterpolator());
                mAnimator.start();

效果就是從View的原位置正向下位移(帶BounceInterpolator效果,反彈三次後靜止),


那其實就這麼多內容我爲什麼還要寫一篇文章記錄下來呢?

原因很簡單:

Animator和Animation是有一些細微的效果差異的。
就拿上面的例子來說,區別在於
a 、(1)中的View動畫效果執行結束後,會回到View本來的位置,即開始的位置,而(2)中的View動畫執行後,則會停留在動畫結束的位置
b、(1)中的View在動畫執行過程中,點擊View的原本位置,即開始的位置(注意,位置動畫執行過程中,這個位置已經沒有圖像了),點擊仍會觸發動畫。效果就是—>View在執行的動畫會被打斷,然後重新開始執行。
而(2)中的View在動畫執行過程中,執行動畫的View的位置是在變化的,你要點擊到在運動中的View,纔可以中斷動畫,讓其重新執行動畫過程。
c、 但是兩者都稍有不協調的地方在於,Animation不會結束在動畫結束的位置,而是在動畫結束後突兀的出現在原本的開始位置。 而Animator 雖然結束在正確的位置,但再次觸發動畫的時候,則是從最初那次的動畫開始位置執行,並不是把結束位置當做新的開始位置,同樣會顯得很突兀。
當然,這也可以被當做特性被使用,主要依據項目本身不同的需求而做相應的策略處理。


文章寫到一半纔想起,之所以寫這篇文章,是因爲之前搜文章都沒搜出滿意解釋不同動畫區別的解釋。
本文也只是做了一個簡單的比較,並沒有對其他動畫做一些基本使用的介紹,不過相信機智的你通過其他文章一定能掌握到的。
剛纔重新搜了一下,發現了這篇文章,覺得很好,也貼給大家。

http://www.tuicool.com/articles/zM7RnqB [Android 動畫]簡要分析一下Animator 與 Animation

PS後話:
之前寫文章都是當做給自己記筆記,格調太低,這是迄今爲止我真正用心手碼的一篇文章,爲了自己,也爲了各位有緣的小夥伴,
我想說的是,之前寫文章的態度不夠嚴謹,從這篇文章開始,我要用心寫哈哈,畢竟,我們碼農是可以有潔癖的不是嗎?要慢慢打磨自己的項目,自己的文章,一切都當親兒子對待。

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