Android View動畫和屬性動畫簡單解析:

一:View動畫

簡介:View動畫通過對場景里的對象不斷做圖像變換(平移、縮放煌张、旋轉(zhuǎn)呐赡、透明度)從而產(chǎn)生動畫效果,是一種漸近式動畫骏融,并且View動畫支持自定義链嘀。
1.View動畫主要分為四類:TranslateAnimation,ScaleAnimation档玻,RotateAnimation怀泊,AlphaAnimation,可通過XML或者Java代碼聲明使用窃肠,動畫XML文件需要放在res/anim/filename.xml中。
例子:

<set xmlns:android="[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)"
    android:interpolator=""
    android:shareInterpolator="["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate 
        android:fromXDelta="float" 
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate 
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
</set>

Java代碼:

// 使用Java代碼加載XML動畫
Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation_test);
mButton.startAnimation(animation);
// 使用Java代碼創(chuàng)建動畫
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);

2.View動畫既可以是單個動畫刷允,也可以由一系列動畫組成冤留。
3.幾個標簽解讀:
set:
表示動畫集合,對應(yīng)AnimationSet類树灶,它可以包含若干個動畫纤怒,并且它的內(nèi)部也是可以嵌套其他動畫集合的。
android:interpolator:
表示動畫集合所采用的插值器天通,什么是插值器呢泊窘?它影響動畫的速度,比如非勻速動畫就需要通過插值器來控制動畫的播放過程。屬性可不指定烘豹,默認為@android:anim/accelerate_decelerate_interpolator瓜贾,即加速減速插值器。
android:shareInterpolator:
表示集合中的動畫是否和集合共享同一個插值器携悯。如果集合不指定插值器祭芦,那么子動畫就需要單獨指定所需的插值器或者使用默認值。
其余的屬性網(wǎng)上都能查到憔鬼,這里就不詳細描述了龟劲。

二:屬性動畫

簡介:屬性動畫通過動態(tài)地改變相關(guān)對象的屬性,比如長寬等轴或,從而實現(xiàn)動畫效果昌跌,屬性動畫為API 11(Android 3.0)以上的新特性,在低版本無法直接使用屬性動畫照雁,但仍然可通過兼容庫(NineOldAndroids)去使用蚕愤。
屬性動畫有ValueAnimator、ObjectAnimator和AnimatorSet等概念囊榜。其中ObjectAnimator繼承自ValueAnimator审胸、AnimatorSet是動畫集合,可以定義一組動畫卸勺。
(1)使用
舉例:改變一個對象(myObject)的translationY屬性砂沛,讓其沿著Y軸上平移一段距離:

ObjectAnimator.ofFloat(myObject, "translationY", -myObject.getHeight()).start();

(2)插值器和估值器:
屬性動畫有兩個新概念:
插值器:根據(jù)時間流逝的百分比來計算出屬性值改變的百分比,對應(yīng)的接口是Interpolator曙求;
估值器:根據(jù)屬性改變的百分比計算出屬性的改變值碍庵,對應(yīng)的接口是TypeEvaluator;
代碼設(shè)置:

ValueAnimator.setEvaluator(TypeEvaluator evaluator)
ValueAnimator.setInterpolator(TimeInterpolator value)

(3)屬性動畫的監(jiān)聽器
屬性動畫提供了監(jiān)聽器用于監(jiān)聽動畫的播放過程悟狱。主要有如下兩個接口:AnimatorUpdateListener和AnimatorListener静浴。

public static interface AnimatorListener {
     void onAnimationStart(Animator animation);
     void onAnimationEnd(Animator animation);
     void onAnimationCancel(Animator animation);
     void onAnimationRepeat(Animator animation);
}

它可以監(jiān)聽動畫的開始、結(jié)束挤渐、取消以及重復(fù)播放苹享。系統(tǒng)提供了AnimatorListener的適配器類AnimatorListenerAdapter。
AnimatorUpdateListener:

public static interface AnimatorUpdateListener { 
     void onAnimationUpdate(ValueAnimator animation);
}

AnimatorUpdateListener會監(jiān)聽整個動畫過程浴麻,動畫是由許多幀組成的得问,每播放一幀,onAnimationUpdate就會被調(diào)用一次软免。
(4)對任意屬性做動畫
屬性動畫的原理:屬性動畫要求動畫作用的對象提供該屬性的get和set方法宫纬,屬性動畫根據(jù)外界傳遞的該屬性的初始值和最終值,以動畫的效果多次去調(diào)用set方法膏萧,每次傳遞給set方法的值都不一樣漓骚,確切地說是隨著時間的推移蝌衔,所傳遞的值越來越接近最終值。
總結(jié)蝌蹂,對object的屬性abc做動畫噩斟,需滿足條件:
(1)object必須提供setAbc方法,如果動畫的時候沒有傳遞初始值叉信,那么還要提供getAbc方法亩冬,因為系統(tǒng)要去取abc屬性的初始值;
(2)object的setAbc對屬性abc所做的改變必須能夠通過某種方法反映出來硼身,比如會帶來UI的改變硅急。
建議:
①、給對象加上get和set方法佳遂;
②营袜、用一個類來包裝原始對象,間接為其提供get和set方法丑罪;
③荚板、采用ValueAnimator,監(jiān)聽動畫過程吩屹,實現(xiàn)屬性的變化跪另。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市煤搜,隨后出現(xiàn)的幾起案子免绿,更是在濱河造成了極大的恐慌,老刑警劉巖擦盾,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘲驾,死亡現(xiàn)場離奇詭異,居然都是意外死亡迹卢,警方通過查閱死者的電腦和手機辽故,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腐碱,“玉大人誊垢,你說我怎么就攤上這事≈⒓” “怎么了喂走?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長筒饰。 經(jīng)常有香客問我缴啡,道長壁晒,這世上最難降的妖魔是什么瓷们? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上谬晕,老公的妹妹穿的比我還像新娘碘裕。我一直安慰自己,他們只是感情好攒钳,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布帮孔。 她就那樣靜靜地躺著,像睡著了一般不撑。 火紅的嫁衣襯著肌膚如雪文兢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天焕檬,我揣著相機與錄音姆坚,去河邊找鬼。 笑死实愚,一個胖子當著我的面吹牛兼呵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腊敲,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼击喂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碰辅?” 一聲冷哼從身側(cè)響起懂昂,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乎赴,沒想到半個月后忍法,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡榕吼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年饿序,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羹蚣。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡原探,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顽素,到底是詐尸還是另有隱情咽弦,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布胁出,位于F島的核電站型型,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏全蝶。R本人自食惡果不足惜闹蒜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一寺枉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绷落,春花似錦姥闪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至函喉,卻和暖如春避归,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背管呵。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工槐脏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人撇寞。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓顿天,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔑担。 傳聞我的和親對象是個殘疾皇子牌废,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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