Android Animation(動畫)

前言

Android 平臺提供實現動畫的解決方案(三種)html

1、3.0之前,android支持兩種動畫:java

(1)Frame Animation:順序播放事先作好的圖像,與gif圖片原理相似,是一種逐幀動畫;android

(2)Tween Animation:經過對場景裏的對象不斷作圖像變換(漸變、平移、縮放、旋轉)產生動畫效果,便是一種補間動畫算法

2、android3.0中又引入了一個新的動畫系統:property Animation函數

(3)Property Animation:經過改變的是對象的實際屬性,只是表示一個值在一段時間內的改變,當值改變時要作什麼事情徹底是你本身決定的。佈局

注意:這三種動畫模式在SDK中被稱爲     property animation      view animation(tween animation)     drawable animation(frame animation)動畫

代碼部分示例截圖:this

D69031486DDC0437412167573020FEBC2C083411CFABF20BF5BAB616C61729EB451373B893DE27EE6561DB522C9F01978C71441ADBA70470AA4E92F40D504E5638C96D2EE1FC18E50A5521547165EEE9

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------編碼

drawable animation

Drawable Animation(Frame Animation):幀動畫,就像GIF圖片,經過一系列Drawable依次顯示來模擬動畫的效果.lua

實現方式——(代碼 | xml):

1、代碼:經過Java代碼實現Frame Animation動畫

(1)要實現Frame Animation動畫,須要建立一個AnimationDrawable對象來表示Frame動畫,而後經過addFrame()方法把每一幀要顯示的內容添加進去,最後經過start()方法就能夠播放動畫了,

經常使用方法:

AnimationDrawable類用於建立由一系列Drawable對象構成的逐幀動畫對象,它能夠做爲一個視圖對象的背景。

AnimationDrawable類的經常使用方法有如下一些:

mAnimationDrawable.addFrame(Drawable frame, int duration);//添加一個幀動畫

mAnimationDrawable.getDuration(int i);//得到幀動畫的時間

mAnimationDrawable.getFrame(int index);//得到指定索引的Drawable對象

mAnimationDrawable.getNumberOfFrames();//得到幀動畫的總數

mAnimationDrawable.isOneShot();//幀動畫是否只運行一次

mAnimationDrawable.isRunning();//幀動畫是否處於運行狀態

mAnimationDrawable.setOneShot(boolean onsShot);//設置幀動畫是否只運行一次

mAnimationDrawable.setVisible(boolean visible, boolean restart);//設置幀動畫是否可見

mAnimationDrawable.start();//運行幀動畫

mAnimationDrawable.stop();//中止幀動畫

具體實現:

(2)須要預先準備了10張單幀動畫圖像,分別命名爲img_0到img_5,並存放在工程的res/drawable目錄下。而後能夠經過以下方法將每一幀的圖像加載到AnimationDrawable對象中。

AnimationDrawable mAnimationDrawable = new AnimationDrawable();      //AnimationDrawable對象

Drawable mDrawable ;        //Drawable對象

ImageView mImageView;      //展現動畫的ImageView 對象

private void setAnimDrawable() {
mAnimationDrawable = new AnimationDrawable();
for (int i = 0; i < 6; i++) {
int resourcesId = getResources().getIdentifier("img_" + i, "mipmap", this.getPackageName()); // 根據資源ID獲取到Drawable對象
mDrawable = ContextCompat.getDrawable(this,resourcesId); //根據資源ID獲取到Drawable對象
mAnimationDrawable.addFrame(mDrawable, 500); // 將此幀添加到AnimationDrawable中
}
mAnimationDrawable.setOneShot(false); // 若是設置爲true,則只會播放一次,不會循環播放。
mImageView.setBackground(mAnimationDrawable); // 將動畫設置爲ImageView背景
}

mAnimationDrawable.start(); // 開始播放

mAnimationDrawable.stop(); //中止播放

2、xml:經過xml佈局文件實現Frame Animation動畫

(1)逐幀動畫的實現,也能夠經過xml佈局文件來完成。咱們能夠放置在/res下的anim或drawable目錄中(/res/[anim | drawable]/filename.xml),文件名能夠做爲資源ID在代碼中引用;若是由徹底由編碼實現,咱們須要使用到AnimationDrawable對象。

(2)使用xml來實現Frame動畫時,首先能夠經過 setBackgroundResource()方法來加載xml動畫布局文件,而後經過getBackground()方法得到動畫,若是要設置到其餘組件的背景能夠再經過 setBackgroundDrawable()方法設置要顯示的動畫,最後經過start()方法來播放動畫便可。

XML語法:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>

注意:

(1)<animation-list>元素是必須的,而且必需要做爲根元素,能夠包含一或多個<item>元素;android:onshot若是定義爲true的話,此動畫只會執行一次,若是爲false則一直循環。

(2)<item>元素表明一幀動畫,android:drawable指定此幀動畫所對應的圖片資源,android:druation表明此幀持續的時間,整數,單位爲毫秒。

經常使用屬性:

Frame動畫的xml文件經常使用屬性以下:

android:drawable[drawable]//加載Drawable對象

android:duration[long]//每一幀動畫的持續時間(單位ms)

android:oneshot[boolean]//動畫是否只運行一次,true運行一次,false重複運行

android:visible[boolean]//Drawable對象的初始能見度狀態,true可見,false不可見(默認爲false)

具體實現:

AnimationDrawable mAnimationDrawable; //AnimationDrawable對象 Drawable mDrawable; //Drawable對象 ImageView mImageView;

      //展現動畫的

ImageView

對象

mImageView.setBackgroundResource(R.anim.frame);    // 指定動畫的幀的列表
mAnimationDrawable= (AnimationDrawable) imageView.getBackground(); // AnimationDrawable--與逐幀動畫相關的Drawable

//

mImageViewOther.setBackgroundDrawable(mAnimationDrawable);

   //若是須要設置在其餘組件上面能夠直接這樣設置

mAnimationDrawable.start(); // 開始播放

mAnimationDrawable.stop(); //中止播放

frame_animation.xml源代碼:
<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false"    >

    <item android:drawable="@drawable/img_0"    android:duration="1000"    /> 
    <item android:drawable="@drawable/img_1"    android:duration="1000"    />
    <item android:drawable="@drawable/img_2"    android:duration="1000"    />
    <item android:drawable="@drawable/img_3"    android:duration="1000"    />
    <item android:drawable="@drawable/img_4"    android:duration="1000"    />
    <item android:drawable="@drawable/img_5"    android:duration="1000"    />

</animation-list>

問題總結:

(1)要在代碼中調用Imageview的setBackgroundResource方法,若是直接在XML佈局文件中設置其src屬性當觸發動畫時會FC。

(2)在動畫start()以前要先stop(),否則在第一次動畫以後會停在最後一幀,這樣動畫就只會觸發一次。

(3)最後一點是SDK中提到的,不要在onCreate中調用start,由於AnimationDrawable尚未徹底跟Window相關聯,若是想要界面顯示時就開始動畫的話,能夠在onWindowFoucsChanged()中調用start()。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

view animation

(1)view animation(tween animation)經過對場景裏的對象不斷作圖像變換(漸變、平移、縮放、旋轉)產生動畫(經過算法將給定屬性值在給定的時間內在兩個關鍵幀間漸變)效果

(2)Tween動畫在Android中分爲4類,它們分別是:AlphaAnimation(透明度動畫)、TranslateAnimation(平移動畫)、ScaleAnimation(縮放動畫)、RotateAnimation(旋轉動畫),都繼承自android.view.Animation 類

(3)表示從一個狀態A向狀態B變化的一個過程,因此英文名字叫Tween動畫、中文名叫:「補間動畫」、「中間動畫」。它們總的說來有兩種實現方式:java code(java源代碼)、xml(xml配置文件)

注意:

(1)View animation只能應用於View對象,並且只支持一部分屬性,如支持縮放旋轉而不支持背景顏色的改變。

(2)View Animation只是改變了View對象繪製的位置,而沒有改變View對象自己,好比,你有一個Button,座標(100,100),Width:200,Height:50,而你有一個動畫使其變爲Width:100,Height:100,你會發現動畫過程當中觸發按鈕點擊的區域還是(100,100)-(300,150)。

(3)View Animation就是一系列View形狀的變換,如大小的縮放,透明度的改變,位置的改變,動畫的定義既能夠用代碼定義也能夠用XML定義,固然,建議用XML定義。

(4)能夠給一個View同時設置多個動畫,好比從透明至不透明的淡入效果,與從小到大的放大效果,這些動畫能夠同時進行,也能夠在一個完成以後開始另外一個。

(5)用XML定義的動畫放在/res/anim/文件夾內。

實現方式——(代碼 | xml):

1、代碼:經過Java代碼實現tween Animation動畫

AlphaAnimation(透明度動畫)

AlphaAnimation有兩個構造函數,分別是:

                      —— AlphaAnimation(Context context, AttributeSet attrs):

                              第二個參數是個屬性集,以後會詳細對AttributeSet 講解

                       ——AlphaAnimation(float fromAlpha, float toAlpha):

                             第一個參數是初始透明度(取值範圍爲0.0到1.0)

                             第二個參數是終止透明度

 

TranslateAnimation(平移動畫)

TranslateAnimation有三個構造函數,分別是:

                       ——TranslateAnimation(Context context, AttributeSet attrs):略過

                       ——TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta):

                             分別對應x軸的起始、終點座標,與y軸的起始、終點座標

                      ——TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue):

                             第一個參數是x軸方向的值的參照(Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT)

                             第二個參數是第一個參數類型的起始值

                             第三個參數與第四個參數是x軸方向的終點參照與對應值

                             後面四個參數就不用解釋了。若是所有選擇Animation.ABSOLUTE,其實就是第二個構造函數。

                              以x軸爲例介紹參照與對應值的關係

                              若是選擇參照爲Animation.ABSOLUTE,那麼對應的值應該是具體的座標值,好比100到300,指絕對的屏幕像素單位

                              若是選擇參照爲Animation.RELATIVE_TO_SELF或者 Animation.RELATIVE_TO_PARENT指的是相對於自身或父控件,

                              對應值應該理解爲相對於自身或者父控件的幾倍或百分之多少。必定要多試試這幾個參數類型!

ScaleAnimation(縮放動畫)

ScaleAnimation(縮放動畫)有四個構造函數,分別是:

                       ——ScaleAnimation(Context context, AttributeSet attrs):略過

                       ——ScaleAnimation(float fromX, float toX, float fromY, float toY):同TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

                       ——ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY):這裏解釋後面兩個參數,pivo英文意思爲「樞軸」,也就是支點。經過這兩個參數能夠控制縮放動畫的放大方向,這個點不會隨對象大小變化而變化

                      ——ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue):若是理解了前面所講的,這個就不作多的說明,若是不清楚,請回頭多用代碼試試。

RotateAnimation(旋轉動畫)

RotateAnimation(旋轉動畫)一樣有四個構造函數,分別是:

                      ——RotateAnimation(Context context, AttributeSet attrs)

                     ——RotateAnimation(float fromDegrees, float toDegrees)

                     ——RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)

                     ——RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float  pivotYValue)

                     (pivotX,pivotY)爲旋轉點。pivotX爲距離左側的偏移量,pivotY爲距離頂部的偏移量。即爲相對於View左上角(0,0)

Animation經常使用方法:

setDuration(long durationMillis):設置動畫持續事件(單位:毫秒)
setFillAfter(boolean fillAfter):若是fillAfter設爲true,則動畫執行後,控件將停留在動畫結束的狀態
setFillBefore(boolean fillBefore):若是fillBefore設爲true,則動畫執行後,控件將回到動畫開始的狀態
setStartOffset(long startOffset):設置動畫執行以前等待的時間(單位:毫秒)
setRepeatCount(int repeatCount):設置動畫重複的次數
setInterpolator(Interpolator i):設置動畫的變化速度
setInterpolator(new AccelerateDecelerateInterpolator()):先加速,後減速
setInterpolator(new AccelerateInterpolator()):加速
setInterpolator(new DecelerateInterpolator()):減速
setInterpolator(new CycleInterpolator()):動畫循環播放特定次數,速率改變沿着正弦曲線
setInterpolator(new LinearInterpolator()):勻速

2、xml:經過xml佈局文件實現tween  Animation動畫

(1)XML文件的根元素能夠爲<alpha>,<scale>,<translate>,<rotate>,interpolator 元素或<set>(表示以上幾個動畫的集合,set能夠嵌套)。默認狀況下,全部動畫是同時進行的,能夠經過startOffset屬性設置各個動畫的開始偏移(開始時間)來達到動畫順序播放的效果

(2)能夠經過設置interpolator屬性改變更畫漸變的方式,如AccelerateInterpolator,開始時慢,而後逐漸加快。默認爲AccelerateDecelerateInterpolator。

具體實現:

定義好動畫的XML文件後,能夠經過相似下面的代碼對指定View應用動畫 tween Animation xml定義請移步http://www.cnblogs.com/yishujun/p/5407711.html

mAnimation = AnimationUtils.loadAnimation(this.getContext(), R.anim.rotate_anim);   //初始化動畫

view.startAnimation(mAnimation );  //給view設置動畫

補充:

注意: 以上都是單獨的使用某個動畫,那麼如何讓多個動畫同時生效呢?答案是 AnimationSet, 該類也是繼承自 Animation的。默認狀況下,全部動畫是同時進行的,能夠經過setStartOffset屬性設置各個動畫的開始偏移(開始時間)來達到動畫順序播放的效果

AnimationSet的簡單使用:

//初始化 TranslateAnimation動畫 

translateAnimation = …;

//初始化 Alpha動畫 

alphaAnimation = …;

//動畫集 

AnimationSet set = new AnimationSet(true); 

set.addAnimation(translateAnimation);  

set.addAnimation(alphaAnimation);  

//設置動畫時間 (做用到每一個動畫) 

set.setDuration(3000); 

view.startAnimation(set); 

AnimationSet和 AnimatorSet簡單區別:

AnimationSet和 AnimatorSet都是動畫集合。這裏簡單介紹下他們的異同,瞭解這些後在設計動畫實現時才能駕輕就熟。
AnimationSet 咱們最經常使用的是調用其 addAnimation 將一個個不同的動畫組織到一塊兒來,而後調用view 的 startAnimation 方法觸發這些動畫執行。功能較弱不能作到把集合中的動畫按必定順序進行組織而後在執行的定製。
AnimatorSet 咱們最經常使用的是調用其play、before、with、after 等方法設置動畫的執行順序,而後調用其start 觸發動畫執行。
AnimationSet 與 AnimatorSet 最大的不一樣在於,AnimationSet 使用的是 Animation 子類、AnimatorSet 使用的是 Animator 的子類。
Animation 是針對視圖外觀的動畫實現,動畫被應用時外觀改變但視圖的觸發點不會發生變化,仍是在原來定義的位置。
Animator  是針對視圖屬性的動畫實現,動畫被應用時對象屬性產生變化,最終致使視圖外觀變化。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

property animation

這個是在Android 3.0中才引進的,它更改的是對象的實際屬性,在View Animation(Tween Animation)中,其改變的是View的繪製效果,真正的View的屬性保持不變,好比不管你在對話中如何縮放Button的大小,Button的有效點擊區域仍是沒有應用動畫時的區域,其位置與大小都不變。而在Property Animation中,改變的是對象的實際屬性,如Button的縮放,Button的位置與大小屬性值都改變了。並且Property Animation不止能夠應用於View,還能夠應用於任何對象。Property Animation只是表示一個值在一段時間內的改變,當值改變時要作什麼事情徹底是你本身決定的。

在Property Animation中,能夠對動畫應用如下屬性:

  • Duration:動畫的持續時間
  • TimeInterpolation:屬性值的計算方式,如先快後慢
  • TypeEvaluator:根據屬性的開始、結束值與TimeInterpolation計算出的因子計算出當前時間的屬性值
  • Repeat Country and behavoir:重複次數與方式,如播放3次、5次、無限循環,能夠此動畫一直重複,或播放完時再反向播放
  • Animation sets:動畫集合,便可以同時對一個對象應用幾個動畫,這些動畫能夠同時播放也能夠對不一樣動畫設置不一樣開始偏移
  • Frame refreash delay:多少時間刷新一次,即每隔多少時間計算一次屬性值,默認爲10ms,最終刷新時間還受系統進程調度與硬件的影響

推薦文章:http://blog.csdn.net/guolin_blog/article/details/43536355http://www.mamicode.com/info-detail-1150209.htmlhttp://www.cnblogs.com/mengdd/p/3301256.html

ValueAnimator

ValueAnimator是屬性動畫中的一個重要的類,其內部使用一種時間循環的機制來計算值與值之間的動畫過渡,咱們只須要將初始值和結束值提供給 ValueAnimator,而且告訴它動畫所需運行的時長,那麼ValueAnimator就會自動幫咱們完成從初始值平滑地過渡到結束值這樣的效果

(1)ValueAnimator 能夠描敘一些整型、浮點型或顏色型值變化,ValueAnimator類可讓你爲這些類型的屬性值設置動畫。

(2)能夠經過以下的一些工廠方法來獲取ValueAnimator實例:ofInt()、ofFloat()或者ofObject,

理解參數

 ValueAnimator ofInt(int... values)   
 ValueAnimator ofArgb(int... values)
 ValueAnimator ofFloat(float... values) 
 ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values)
 ValueAnimator ofObject(TypeEvaluator evaluator, Object... values) 

示例1:

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(2000);
animation.start();

當start方法調用的時候,ValueAnimator 在0和1之間計算動畫的值(這個計算工做就是由ValueAnimator幫助咱們完成),持續時間是2000ms,理論上能夠理解成把0到1這個時間片斷 分紅2000份,在每一份中咱們能夠作相應的動做,好比慢慢移動圖片(其實是多份爲一組值或者隔不少份取一個值value=getAnimatedValue)

示例2

ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f); anim.setDuration(5000); anim.start();當有多個參數的時候如上能夠理解將一個值在5秒內從0過渡到5,再過渡到3,再過渡到10

示例2:

ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
animation.setDuration(2000);
animation.start();
在上面的代碼中,當start方法調用的時候,ValueAnimator 在startPropertyValue和endPropertyValue之間使用MyTypeEvaluator計算屬性值,持續時間是2000ms

上面的示例代碼片斷不會對一個對象產生實際的影響,這時由於ValueAnimator並不會直接做用在對象或屬性上。如過想修改某個對象的相應屬性(移動圖片,圖片距離屏幕左邊距離),最好的辦法是在計算他們值的時候修改他們你能夠在ValueAnimator中經過定義監聽器來在動畫的持續過程當中處理重要的事件。當你實現這些監聽器的時候,你能夠經過調用getAnimatedValue()來獲取當前幀計算後的值

注意:

(1)咱們還能夠調用setStartDelay()方法來設置動畫延遲播放的時間,調用setRepeatCount()和setRepeatMode()方法來設置動畫循環播放的次數以及循環播放的模式,循環模式包括RESTART和REVERSE兩種,分別表示從新播放和倒序播放的意思。這些方法都很簡單

(2)因爲咱們要進行動畫處理的值是各類各樣的,可能不是float、int或顏色值,那咱們怎麼使用屬性動畫呢?爲此,ValueAnimator提供了一個ofObject方法,該方法接收一個TypeEvaluator類型的參數,咱們須要實現該接口 TypeEvaluator的evaluate方法,只要咱們實現了TypeEvaluator接口,咱們就能經過ofObject方法處理任意類型的數據,相比ValueAnimator類,ObjectAnimator更加實用,由於它真正能夠做用在一個對象上。不過ObjectAnimator是繼承自ValueAnimator的,因此主體方法仍是ValueAnimator裏實現的

推薦文章:http://blog.csdn.net/feiduclear_up/article/details/45893619

ObjectAnimator

ObjectAnimator繼承自ValueAnimator。咱們以前提到,要讓屬性動畫漸變式地更改對象中某個屬性的值,可分兩步操做:第一步,動畫須要計算出某一時刻屬性值應該是多少;第二步,須要將計算出的屬性值賦值給動畫的屬性。 ValueAnimator只實現了第一步,也就是說ValueAnimator只負責以動畫的形式不斷計算不一樣時刻的屬性值,但須要咱們開發者本身寫代碼在動畫監聽器AnimatorUpdateListener的onAnimationUpdate方法中將計算出的值經過對象的setXXX等方法更新對象的屬性值。ObjectAnimator比ValueAnimator更進一步,其會自動調用對象的setXXX方法更新對象中的屬性值。

經常使用設置方法:

  1. setInterpolator():設置動畫插值
  2. setDuration():設置動畫執行時間
  3. setRepeatCount():設置動畫重複次數
  4. setRepeatMode():設置動畫重複模式 ,

          RESTART:從新從頭開始執行。

         REVERSE:反方向執行。

  5. setStartDelay():設置動畫延時操做
  6. setTarget():設置動畫的對象
  7. setEvaluator():設置動畫過分的評估者。

推薦文章:http://blog.csdn.net/feiduclear_up/article/details/45915377

關於property animation的具體使用請參考示例

AnimatorSet(組合動畫)

上面咱們看到的都是單個動畫,那麼須要實現組合動畫怎麼辦呢?不着急,Android工程師給咱們提供了兩種方法來實現,AnimatorSet類,ObjectAnimator.ofPropertyValuesHolder()方法。

after(Animator anim) 將現有動畫插入到傳入的動畫以後執行
after(long delay) 將現有動畫延遲指定毫秒後執行
before(Animator anim) 將現有動畫插入到傳入的動畫以前執行
with(Animator anim) 將現有動畫和傳入的動畫同時執行

xml文件動畫

請移步到推薦文章,寫得很是好

推薦文章:http://www.cnblogs.com/mengdd/p/3303403.html

補充

在 Android 3.0 中給 View 增長了一些新的屬性

在 Android 3.0 中給 View 增長了一些新的屬性以及相應的 getter、setter 方法。Property Animation系統能夠經過修改 View 對象實際的屬性值來實現屏幕上的動畫效果。此外,當屬性值發生變化時,Views 也會自動調用 invalidate() 方法來刷新屏幕。 View 類中新增的便於實現 property 動畫的屬性包括:

     (1) translationX 和 translationY:這兩個屬性控制着 View 的屏幕位置座標變化量,以 layout 容器的左上角爲座標原點;
     (2) rotation、rotationX 和 rotationY:這三個屬性控制着 2D 旋轉角度(rotation屬性)和圍繞某樞軸點的 3D 旋轉角度;
     (3) scaleX、scaleY:這兩個屬性控制着 View 圍繞某樞軸點的 2D 縮放比例;
     (4) pivotX 和 pivotY: 這兩個屬性控制着樞軸點的位置,前述的旋轉和縮放都是以此點爲中心展開的,缺省的樞軸點是 View 對象的中心點;
     (5) x 和 y:這是指 View 在容器內的最終位置,等於 View 左上角相對於容器的座標加上 translationX 和 translationY 後的值;
     (6)alpha:表示 View 的 alpha 透明度。缺省值爲 1 (不透明),爲 0 則表示徹底透明(看不見);
要動畫顯示 View 對象的某個屬性,好比顏色或旋轉值,咱們全部要作的事情就是建立一個 Property animation,並設定對應的 View 屬性。那接下來咱們就用ObjectAnimator類來分別實現View的透明度漸變、收縮、移動和旋轉等動畫效果。

 

示例代碼源碼下載

相關文章
相關標籤/搜索