1 背景
不能只分析源碼呀,分析的同時也要整理歸納基礎知識,剛好有人微博私信讓全面說說Android的動畫,所以今天來一發(fā)Android應用的各種Animation大集合。英文厲害的請直接移步參考Android Developer。
Android系統(tǒng)提供了很多豐富的API去實現(xiàn)UI的2D與3D動畫,最主要的劃分可以分為如下幾類:
View Animation:?視圖動畫在古老的Android版本系統(tǒng)中就已經(jīng)提供了,只能被用來設置View的動畫。
Drawable Animation:?這種動畫(也叫Frame動畫、幀動畫)其實可以劃分到視圖動畫的類別,專門用來一個一個的顯示Drawable的resources,就像放幻燈片一樣。
Property Animation:?屬性動畫只對Android 3.0(API 11)以上版本的Android系統(tǒng)才有效,這種動畫可以設置給任何Object,包括那些還沒有渲染到屏幕上的對象。這種動畫是可擴展的,可以讓你自定義任何類型和屬性的動畫。
可以看見,當前應用程序開發(fā)涉及的主要動畫也就這三大類,我們接下來以類別為基礎來慢慢展開說明。
2 View Animation(視圖動畫)使用詳解 2-1 視圖動畫概述
視圖動畫,也叫Tween(補間)動畫可以在一個視圖容器內(nèi)執(zhí)行一系列簡單變換(位置、大小、旋轉、透明度)。譬如,如果你有一個TextView對象,您可以移動、旋轉、縮放、透明度設置其文本,當然,如果它有一個背景圖像,背景圖像會隨著文本變化。
補間動畫通過XML或Android代碼定義,建議使用XML文件定義,因為它更具可讀性、可重用性。
如下是視圖動畫相關的類繼承關系:
AlphaAnimation?放置在res/anim/目錄下
漸變透明度動畫效果
RotateAnimation
?放置在res/anim/目錄下
畫面轉移旋轉動畫效果
ScaleAnimation
?放置在res/anim/目錄下
漸變尺寸伸縮動畫效果
TranslateAnimation
?放置在res/anim/目錄下
畫面轉換位置移動動畫效果
AnimationSet
?放置在res/anim/目錄下
一個持有其它動畫元素alpha、scale、translate、rotate或者其它set元素的容器
通過上圖和上表可以直觀的看出來補間動畫的關系及種類了吧,接下來我們就詳細一個一個的介紹一下各種補間動畫。
2-2 視圖動畫詳細說明
可以看出來Animation抽象類是所有補間動畫類的基類,所以基類會提供一些通用的動畫屬性方法,如下我們就來詳細看看這些屬性
2-2-1 Animation屬性詳解android:detachWallpaper setDetachWallpaper(boolean) 是否在壁紙上運行 android:duration setDuration(long) 動畫持續(xù)時間,毫秒為單位 android:fillAfter setFillAfter(boolean) 控件動畫結束時是否保持動畫最后的狀態(tài) android:fillBefore setFillBefore(boolean) 控件動畫結束時是否還原到開始動畫前的狀態(tài) android:fillEnabled setFillEnabled(boolean) 與android:fillBefore效果相同 android:interpolator setInterpolator(Interpolator) 設定插值器(指定的動畫效果,譬如回彈等) android:repeatCount setRepeatCount(int) 重復次數(shù) android:repeatMode setRepeatMode(int) 重復類型有兩個值,reverse表示倒序回放,restart表示從頭播放 android:startOffset setStartOffset(long) 調(diào)用start函數(shù)之后等待開始運行的時間,單位為毫秒 android:zAdjustment setZAdjustment(int) 表示被設置動畫的內(nèi)容運行時在Z軸上的位置(top/bottom/normal),默認為normal
也就是說,無論我們補間動畫的哪一種都已經(jīng)具備了這種屬性,也都可以設置使用這些屬性中的一個或多個。
那接下來我們就看看每種補間動畫特有的一些屬性說明吧。
2-2-2 Alpha屬性詳解android:fromAlpha AlphaAnimation(float fromAlpha, …) 動畫開始的透明度(0.0到1.0,0.0是全透明,1.0是不透明) android:toAlpha AlphaAnimation(…, float toAlpha) 動畫結束的透明度,同上 2-2-3 Rotate屬性詳解android:fromDegrees RotateAnimation(float fromDegrees, …) 旋轉開始角度,正代表順時針度數(shù),負代表逆時針度數(shù) android:toDegrees RotateAnimation(…, float toDegrees, …) 旋轉結束角度,正代表順時針度數(shù),負代表逆時針度數(shù) android:pivotX RotateAnimation(…, float pivotX, …) 縮放起點X坐標(數(shù)值、百分數(shù)、百分數(shù)p,譬如50表示以當前View左上角坐標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控件寬高的50%做為初始點) android:pivotY RotateAnimation(…, float pivotY) 縮放起點Y坐標,同上規(guī)律 2-2-4 Scale屬性詳解android:fromXScale ScaleAnimation(float fromX, …) 初始X軸縮放比例,1.0表示無變化 android:toXScale ScaleAnimation(…, float toX, …) 結束X軸縮放比例 android:fromYScale ScaleAnimation(…, float fromY, …) 初始Y軸縮放比例 android:toYScale ScaleAnimation(…, float toY, …) 結束Y軸縮放比例 android:pivotX ScaleAnimation(…, float pivotX, …) 縮放起點X軸坐標(數(shù)值、百分數(shù)、百分數(shù)p,譬如50表示以當前View左上角坐標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控件寬高的50%做為初始點) android:pivotY ScaleAnimation(…, float pivotY) 縮放起點Y軸坐標,同上規(guī)律 2-2-5 Translate屬性詳解android:fromXDelta TranslateAnimation(float fromXDelta, …) 起始點X軸坐標(數(shù)值、百分數(shù)、百分數(shù)p,譬如50表示以當前View左上角坐標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控件寬高的50%做為初始點) android:fromYDelta TranslateAnimation(…, float fromYDelta, …) 起始點Y軸從標,同上規(guī)律 android:toXDelta TranslateAnimation(…, float toXDelta, …) 結束點X軸坐標,同上規(guī)律 android:toYDelta TranslateAnimation(…, float toYDelta) 結束點Y軸坐標,同上規(guī)律 2-2-6 AnimationSet詳解
AnimationSet繼承自Animation,是上面四種的組合容器管理類,沒有自己特有的屬性,他的屬性繼承自Animation,所以特別注意,當我們對set標簽使用Animation的屬性時會對該標簽下的所有子控件都產(chǎn)生影響。
2-3 視圖動畫使用方法
通過上面對于動畫的屬性介紹之后我們來看看在Android中這些動畫如何使用(PS:這里直接演示xml方式,至于java方式太簡單了就不說了),如下
上面就是一個標準的使用我們定義的補間動畫的模板。至于補間動畫的使用,Animation還有如下一些比較實用的方法介紹:
reset() 重置Animation的初始化 cancel() 取消Animation動畫 start() 開始Animation動畫 setAnimationListener(AnimationListener listener) 給當前Animation設置動畫監(jiān)聽 hasStarted() 判斷當前Animation是否開始 hasEnded() 判斷當前Animation是否結束
既然補間動畫只能給View使用,那就來看看View中和動畫相關的幾個常用方法吧,如下:
...
ImageView?spaceshipImage?=?(ImageView)?findViewById(R.id.spaceshipImage); Animation?hyperspaceJumpAnimation?=?AnimationUtils.loadAnimation(this,?R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
startAnimation(Animation animation) 對當前View開始設置的Animation動畫 clearAnimation() 取消當View在執(zhí)行的Animation動畫
到此整個Android的補間動畫常用詳細屬性及方法全部介紹完畢,如有特殊的屬性需求可以訪問Android Developer查閱即可。如下我們就來個綜合大演練。
2-4 視圖動畫注意事項
關于視圖動畫(補間動畫)的例子我就不介紹了,網(wǎng)上簡直多的都泛濫了。只是強調(diào)在使用補間動畫時注意如下一點即可:
特別特別注意:補間動畫執(zhí)行之后并未改變View的真實布局屬性值。切記這一點,譬如我們在Activity中有一個Button在屏幕上方,我們設置了平移動畫移動到屏幕下方然后保持動畫最后執(zhí)行狀態(tài)呆在屏幕下方,這時如果點擊屏幕下方動畫執(zhí)行之后的Button是沒有任何反應的,而點擊原來屏幕上方?jīng)]有Button的地方卻響應的是點擊Button的事件。
2-5 視圖動畫Interpolator插值器詳解 2-5-1 插值器簡介
介紹補間動畫插值器之前我們先來看一幅圖,如下:
可以看見其實各種插值器都是實現(xiàn)了Interpolator接口而已,同時可以看見系統(tǒng)提供了許多已經(jīng)實現(xiàn)OK的插值器,具體如下:
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 動畫始末速率較慢,中間加速 AccelerateInterpolator @android:anim/accelerate_interpolator 動畫開始速率較慢,之后慢慢加速 AnticipateInterpolator @android:anim/anticipate_interpolator 開始的時候從后向前甩 AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 類似上面AnticipateInterpolator BounceInterpolator @android:anim/bounce_interpolator 動畫結束時彈起 CycleInterpolator @android:anim/cycle_interpolator 循環(huán)播放速率改變?yōu)檎仪€ DecelerateInterpolator @android:anim/decelerate_interpolator 動畫開始快然后慢 LinearInterpolator @android:anim/linear_interpolator 動畫勻速改變 OvershootInterpolator @android:anim/overshoot_interpolator 向前彈出一定值之后回到原來位置 PathInterpolator ? 新增,定義路徑坐標后按照路徑坐標來跑。
如上就是系統(tǒng)提供的一些插值器,下面我們來看看怎么使用他們。
2-5-2 插值器使用方法
插值器的使用比較簡單,如下:
...
2-5-3 插值器的自定義
有時候你會發(fā)現(xiàn)系統(tǒng)提供的插值器不夠用,可能就像View一樣需要自定義。所以接下來我們來看看插值器的自定義,關于插值器的自定義分為兩種實現(xiàn)方式,xml自定義實現(xiàn)(其實就是對現(xiàn)有的插值器的一些屬性修改)或者java代碼實現(xiàn)方式。如下我們來說說。
先看看XML自定義插值器的步驟:
在res/anim/目錄下創(chuàng)建filename.xml文件。修改你準備自定義的插值器。
在你的補間動畫文件中引用該文件即可。
可以看見上面第二步修改的是現(xiàn)有插值器的一些屬性,但是有些插值器卻不具備修改屬性,具體如下:
無可自定義的attribute。
android:factor 浮點值,加速速率(默認值為1)。
android:tension 浮點值,起始點后拉的張力數(shù)(默認值為2)。
android:tension 浮點值,起始點后拉的張力數(shù)(默認值為2)。?
android:extraTension 浮點值,拉力的倍數(shù)(默認值為1.5)。
無可自定義的attribute。
android:cycles 整形,循環(huán)的個數(shù)(默認為1)。
android:factor 浮點值,減速的速率(默認為1)。
無可自定義的attribute。
android:tension 浮點值,超出終點后的張力(默認為2)。
再來看看Java自定義插值器的(Java自定義插值器其實是xml自定義的升級,也就是說如果我們修改xml的屬性還不能滿足需求,那就可以選擇通過Java來實現(xiàn))方式。
可以看見上面所有的Interpolator都實現(xiàn)了Interpolator接口,而Interpolator接口又繼承自TimeInterpolator,TimeInterpolator接口定義了一個float getInterpolation(float input);方法,這個方法是由系統(tǒng)調(diào)用的,其中的參數(shù)input代表動畫的時間,在0和1之間,也就是開始和結束之間。
如下就是一個動畫始末速率較慢、中間加速的AccelerateDecelerateInterpolator插值器:
public?class?AccelerateDecelerateInterpolator?extends?BaseInterpolator ????????implements?NativeInterpolatorFactory?{ ????...... ????public?float?getInterpolation(float?input)?{ ????????return?(float)(Math.cos((input?+?1)?*?Math.PI)?/?2.0f)?+?0.5f; ????} ????...... }
到此整個補間動畫與補間動畫的插值器都分析完畢了,接下來看下別的動畫。
【工匠若水?http://blog.csdn.net/yanbober?轉載請注明出處。點我開始Android技術交流】
3 Drawable Animation(Drawable動畫)使用詳解 3-1 Drawable動畫概述
Drawable動畫其實就是Frame動畫(幀動畫),它允許你實現(xiàn)像播放幻燈片一樣的效果,這種動畫的實質(zhì)其實是Drawable,所以這種動畫的XML定義方式文件一般放在res/drawable/目錄下。具體關于幀動畫的xml使用方式翻墻點擊我查看,java方式翻墻點擊我查看。
如下圖就是幀動畫的源碼文件:
可以看見實際的真實父類就是Drawable。
3-2 Drawable動畫詳細說明
我們依舊可以使用xml或者java方式實現(xiàn)幀動畫。但是依舊推薦使用xml,具體如下:
?必須是根節(jié)點,包含一個或者多個
元素,屬性有:
android:oneshot?true代表只執(zhí)行一次,false循環(huán)執(zhí)行。?類似一幀的動畫資源。
?animation-list的子項,包含屬性如下:
android:drawable?一個frame的Drawable資源。android:duration?一個frame顯示多長時間。 3-3 Drawable動畫實例演示
關于幀動畫相對來說比較簡單,這里給出一個常規(guī)使用框架,如下:
ImageView?rocketImage?=?(ImageView)?findViewById(R.id.rocket_image); rocketImage.setBackgroundResource(R.drawable.rocket_thrust); rocketAnimation?=?(AnimationDrawable)?rocketImage.getBackground(); rocketAnimation.start();
特別注意,AnimationDrawable的start()方法不能在Activity的onCreate方法中調(diào)運,因為AnimationDrawable還未完全附著到window上,所以最好的調(diào)運時機是onWindowFocusChanged()方法中。
至此幀動畫也就說明完成了。讓我們接下來進入Android更牛叉的動畫類型。
4 Property Animation(屬性動畫)使用詳解
在使用屬性動畫之前先來看幾個常用的View屬性成員:
translationX,translationY:控制View的位置,值是相對于View容器左上角坐標的偏移。rotationX,rotationY:控制相對于軸心旋轉。x,y:控制View在容器中的位置,即左上角坐標加上translationX和translationY的值。alpha:控制View對象的alpha透明度值。
這幾個常用的屬性相信大家都很熟悉,接下來的屬性動畫我們就從這里展開。
4-1 屬性動畫概述
Android 3.0以后引入了屬性動畫,屬性動畫可以輕而易舉的實現(xiàn)許多View動畫做不到的事,上面也看見了,View動畫無非也就做那幾種事情,別的也搞不定,而屬性動畫就可以的,譬如3D旋轉一張圖片。其實說白了,你記住一點就行,屬性動畫實現(xiàn)原理就是修改控件的屬性值實現(xiàn)的動畫。
具體先看下類關系:
/** ?*?This?is?the?superclass?for?classes?which?provide?basic?support?for?animations?which?can?be ?*?started,?ended,?and?have?AnimatorListeners?added?to?them. ?*/ public?abstract?class?Animator?implements?Cloneable?{ ????...... }
所有的屬性動畫的抽象基類就是他。我們看下他的實現(xiàn)子類:?
?
其實可以看見,屬性動畫的實現(xiàn)有7個類(PS,之所以類繼承關系列表會出來那么多是因為我下載了所有版本的SDK,你只用關注我紅點標注的就行,妹的,ubuntu下圖片處理工具怎么都這么難用),進去粗略分析可以發(fā)現(xiàn),好幾個是hide的類,而其他可用的類繼承關系又如下:
ValueAnimator?放置在res/animator/目錄下
在一個特定的時間里執(zhí)行一個動畫
TimeAnimator
不支持/點我查看原因
時序監(jiān)聽回調(diào)工具
ObjectAnimator
?放置在res/animator/目錄下
一個對象的一個屬性動畫
AnimatorSet
?放置在res/animator/目錄下
動畫集合
所以可以看見,我們平時使用屬性動畫的重點就在于AnimatorSet、ObjectAnimator、TimeAnimator、ValueAnimator。所以接下來我們就來依次說說如何使用。
4-2 屬性動畫詳細說明 4-2-1 屬性動畫計算原理
參看Android官方文檔,英文原版詳情點我查看!
Android屬性動畫(注意最低兼容版本,不過可以使用開源項目來替代低版本問題)提供了以下屬性:
Duration:動畫的持續(xù)時間;TimeInterpolation:定義動畫變化速率的接口,所有插值器都必須實現(xiàn)此接口,如線性、非線性插值器;TypeEvaluator:用于定義屬性值計算方式的接口,有int、float、color類型,根據(jù)屬性的起始、結束值和插值一起計算出當前時間的屬性值;Animation sets:動畫集合,即可以同時對一個對象應用多個動畫,這些動畫可以同時播放也可以對不同動畫設置不同的延遲;Frame refreash delay:多少時間刷新一次,即每隔多少時間計算一次屬性值,默認為10ms,最終刷新時間還受系統(tǒng)進程調(diào)度與硬件的影響;Repeat Country and behavoir:重復次數(shù)與方式,如播放3次、5次、無限循環(huán),可以讓此動畫一直重復,或播放完時向反向播放;
接下來先來看官方為了解釋原理給出的兩幅圖(其實就是初中物理題,不解釋):
?
上面就是一個線性勻速動畫,描述了一個Object的X屬性運動動畫,該對象的X坐標在40ms內(nèi)從0移動到40,每10ms刷新一次,移動4次,每次移動為40/4=10pixel。?
?
上面是一個非勻速動畫,描述了一個Object的X屬性運動動畫,該對象的X坐標在40ms內(nèi)從0移動到40,每10ms刷新一次,移動4次,但是速率不同,開始和結束的速度要比中間部分慢,即先加速后減速。
接下來我們來詳細的看一下,屬性動畫系統(tǒng)的重要組成部分是如何計算動畫值的,下圖描述了如上面所示動畫的實現(xiàn)作用過程。
其中的ValueAnimator是動畫的執(zhí)行類,跟蹤了當前動畫的執(zhí)行時間和當前時間下的屬性值;ValueAnimator封裝了動畫的TimeInterpolator時間插值器和一個TypeEvaluator類型估值,用于設置動畫屬性的值,就像上面圖2非線性動畫里,TimeInterpolator使用了AccelerateDecelerateInterpolator、TypeEvaluator使用了IntEvaluator。
為了執(zhí)行一個動畫,你需要創(chuàng)建一個ValueAnimator,并且指定目標對象屬性的開始、結束值和持續(xù)時間。在調(diào)用start后,整個動畫過程中, ValueAnimator會根據(jù)已經(jīng)完成的動畫時間計算得到一個0到1之間的分數(shù),代表該動畫的已完成動畫百分比。0表示0%,1表示100%,譬如上面圖一線性勻速動畫中總時間 t = 40 ms,t = 10 ms的時候是 0.25。
當ValueAnimator計算完已完成動畫分數(shù)后,它會調(diào)用當前設置的TimeInterpolator,去計算得到一個interpolated(插值)分數(shù),在計算過程中,已完成動畫百分比會被加入到新的插值計算中。如上圖2非線性動畫中,因為動畫的運動是緩慢加速的,它的插值分數(shù)大約是 0.15,小于t = 10ms時的已完成動畫分數(shù)0.25。而在上圖1中,這個插值分數(shù)一直和已完成動畫分數(shù)是相同的。
當插值分數(shù)計算完成后,ValueAnimator會根據(jù)插值分數(shù)調(diào)用合適的 TypeEvaluator去計算運動中的屬性值。
好了,現(xiàn)在我們來看下代碼就明白這段話了,上面圖2非線性動畫里,TimeInterpolator使用了AccelerateDecelerateInterpolator、TypeEvaluator使用了IntEvaluator。所以這些類都是標準的API,我們來看下標準API就能類比自己寫了,如下:
首先計算已完成動畫時間分數(shù)(以10ms為例):t=10ms/40ms=0.25。
接著看如下源碼如何實現(xiàn)計算差值分數(shù)的:
public?class?AccelerateDecelerateInterpolator?extends?BaseInterpolator ????????implements?NativeInterpolatorFactory?{ ????public?AccelerateDecelerateInterpolator()?{ ????} ????...... ????//這是我們關注重點,可以發(fā)現(xiàn)如下計算公式計算后(input即為時間因子)插值大約為0.15。 ????public?float?getInterpolation(float?input)?{ ????????return?(float)(Math.cos((input?+?1)?*?Math.PI)?/?2.0f)?+?0.5f; ????} ????...... }
其實AccelerateDecelerateInterpolator的基類接口就是TimeInterpolator,如下,他只有getInterpolation方法,也就是上面我們關注的方法。
public?interface?TimeInterpolator?{ ????float?getInterpolation(float?input); }
接著ValueAnimator會根據(jù)插值分數(shù)調(diào)用合適的TypeEvaluator(IntEvaluator)去計算運動中的屬性值,如下,因為startValue = 0,所以屬性值:0+0.15*(40-0)= 6。
public?class?IntEvaluator?implements?TypeEvaluator{ ????public?Integer?evaluate(float?fraction,?Integer?startValue,?Integer?endValue)?{ ????????int?startInt?=?startValue; ????????return?(int)(startInt?+?fraction?*?(endValue?-?startInt)); ????} }
這就是官方給的一個關于屬性動畫實現(xiàn)的過程及基本原理解釋,相信你看到這里是會有些迷糊的,沒關系,你先有個大致概念就行,接下來我們會慢慢進入實戰(zhàn),因為Android的屬性動畫相對于其他動畫來說涉及的知識點本來就比較復雜,所以我們慢慢來。
4-2-2 XML方式屬性動畫
在xml中可直接用的屬性動畫節(jié)點有ValueAnimator、ObjectAnimator、AnimatorSet。如下是官方的一個例子和解釋(詳情點我):
...
屬性解釋:
android:ordering 控制子動畫啟動方式是先后有序的還是同時進行。sequentially:動畫按照先后順序;together(默認):動畫同時啟動;
屬性解釋:
android:propertyName String類型,必須要設置的節(jié)點屬性,代表要執(zhí)行動畫的屬性(通過名字引用),辟如你可以指定了一個View的”alpha” 或者 “backgroundColor” ,這個objectAnimator元素沒有對外說明target屬性,所以你不能在XML中設置執(zhí)行這個動畫,必須通過調(diào)用loadAnimator()方法加載你的XML動畫資源,然后調(diào)用setTarget()應用到具備這個屬性的目標對象上(譬如TextView)。 android:valueTo float、int或者color類型,必須要設置的節(jié)點屬性,表明動畫結束的點;如果是顏色的話,由6位十六進制的數(shù)字表示。 android:valueFrom 相對應valueTo,動畫的起始點,如果沒有指定,系統(tǒng)會通過屬性的get方法獲取,顏色也是6位十六進制的數(shù)字表示。 android:duration 動畫的時長,int類型,以毫秒為單位,默認為300毫秒。 android:startOffset 動畫延遲的時間,從調(diào)用start方法后開始計算,int型,毫秒為單位。 android:repeatCount 一個動畫的重復次數(shù),int型,”-1“表示無限循環(huán),”1“表示動畫在第一次執(zhí)行完成后重復執(zhí)行一次,也就是兩次,默認為0,不重復執(zhí)行。 android:repeatMode 重復模式:int型,當一個動畫執(zhí)行完的時候應該如何處理。該值必須是正數(shù)或者是-1,“reverse”會使得按照動畫向相反的方向執(zhí)行,可實現(xiàn)類似鐘擺效果?!皉epeat”會使得動畫每次都從頭開始循環(huán)。 android:valueType 關鍵參數(shù),如果該value是一個顏色,那么就不需要指定,因為動畫框架會自動的處理顏色值。有intType和floatType(默認)兩種:分別說明動畫值為int和float型。
屬性解釋:?
同上屬性,不多介紹。
XML屬性動畫使用方法:
AnimatorSet?set?=?(AnimatorSet)?AnimatorInflater.loadAnimator(myContext, ????R.animtor.property_animator); set.setTarget(myObject); set.start();
4-2-3 Java方式屬性動畫
1、ObjectAnimator:繼承自ValueAnimator,允許你指定要進行動畫的對象以及該對象的一個屬性。該類會根據(jù)計算得到的新值自動更新屬性。大多數(shù)的情況使用ObjectAnimator就足夠了,因為它使得目標對象動畫值的處理過程變得足夠簡單,不用像ValueAnimator那樣自己寫動畫更新的邏輯,但是ObjectAnimator有一定的限制,比如它需要目標對象的屬性提供指定的處理方法(譬如提供getXXX,setXXX方法),這時候你就需要根據(jù)自己的需求在ObjectAnimator和ValueAnimator中看哪種實現(xiàn)更方便了。
<pre style="font-family:'Source Code Pro', monospace;font-size:14px;l
java類名 | xml關鍵字 | 描述信息 |
---|---|---|
xml屬性 | java方法 | 解釋 |
xml屬性 | java方法 | 解釋 |
xml屬性 | java方法 | 解釋 |
xml屬性 | java方法 | 解釋 |
xml屬性 | java方法 | 解釋 |
Animation類的方法 | 解釋 | |
View類的常用動畫操作方法 | 解釋 | |
java類 | xml id值 | 描述 |
java類名 | xml關鍵字 | 描述信息 |
xml屬性 | 解釋 | |
xml屬性 | 解釋 |