Android屬性動畫

2021-07-05 15:25:59 字數 2971 閱讀 8416

android的動畫可以分為三種:補間動畫,幀動畫,屬性動畫。現在很多書籍種大部分都是簡單的描述補間動畫和幀動畫,屬性動畫的概念卻沒有提到,所以今天就全面的分析一下屬性動畫。屬性動畫實際操作的是view的屬性值,因此可以很靈活的實現各種效果,而不侷限於之前的幾種動畫。

objectanimator是我們屬性動畫常用到的類,建立他的例項只需要通過他的簡單工廠來返回。傳的引數包括乙個物件和物件的屬性,物件的屬性必須要有get和set方法,還要填寫屬性的初始值和最終值,如果屬性值只寫乙個,那麼會認為是最終值。

objectanimator例項

objectanimator

.offloat(view, "width", 0.0f, 360.0f)

.setduration(1000)

.start();

這個例子的效果是讓view的寬度經過1秒之後從0px變成360px。

動畫繪製過程的監聽

animator.addupdatelistener(new animatorupdatelistener() 

});

該方法用來監聽每一幀動畫的繪製過程,我們可以再每一幀動畫繪製的過程中,實現自己的邏輯

同時修改多個屬性值

ps:有兩種方式,乙個是通過animatorset,另一種就是通過監聽幀

objectanimator anim = objectanimator.offloat(view, "wxb", 1.0f, 0.0f)

.setduration(500);

anim.start();

anim.addupdatelistener(new animatorupdatelistener()

});

我們監聽乙個並不存在的屬性,因為我只需要監聽它的幀數變化,通過得到這個變化值,我們來實現自己所要實現的效果。

public void propertyvaluesholder(view view)
為不具有get和set屬性提供修改方法

google為我們提供了2種方法為我們參考,一種是通過自己寫乙個包裝類,為其提供get和set方法,另一種是通過valueanimator的方法供我們進行實現。

包裝類private view mtarget;

mtarget = target;

}public int getwidth()

public void setwidth(int width)

} 使用

這樣我們就給屬性加上了get和set方法。

相比與objectanimator,valueanimator並不能直接操作屬性,它更像乙個數值提供者,他通過提供數值,我們來監聽他的值變化來實現自己的邏輯。

valueanimator animator = valueanimator.offloat(0, 100);

animator.settarget(view);

animator.setduration(1000).start();

animator.addupdatelistener(new animatorupdatelistener()

});

我們可以發現,相比於objectanimator他顯然封裝的更好。valueanimator是計算動畫過程中的值,包括動畫開始結束,包括持續的值。但是並沒有具體到哪個物件上面。所以也就不會有什麼動畫出來。要利用valueanimator實現動畫效果,就跟我們上面所說的一樣,就是給我們的valueanimator物件新增動畫監聽,在監聽過程種,我們可以通過getanimatedvalue來獲取當前幀數的值,從而實現自己的邏輯。

valueanimtor裡面封裝了乙個typeevaluator,typeevaluator定義了從屬性值從開始到結束的變化速率,簡單來說他可以是變速的,或者是均速的,我們上次的valueanimator.offloat就是通過這個來實現的。還有timeinterpolator他是時間插入值。反應動畫的運動速率。

源**

public class floatevaluator implements typeevaluator   

}

valueanimator animator=valueanimator.ofobject(new typeevaluator() 

}, 0,100);

animator.setduration(1000);

animator.setinterpolator(new bounceinterpolator());

animator.start();

animator.addupdatelistener(new animatorupdatelistener()

});

objectanimator animator1 = objectanimator.offloat(imageview, "scalex",

1f, 2f);

objectanimator animator2 = objectanimator.offloat(imageview, "scaley",

1f, 2f);

objectanimator animator3 = objectanimator.offloat(imageview,

"translationy", 0f, 500f);

animatorset set = new animatorset();

set.setduration(1000);

set.playtogether(animator1, animator2, animator3);

set.start();

android屬性動畫

一 屬性動畫的工作原理,主要有三個步驟 1 計算時間流逝。android動畫系統呼叫,用0 1代表時間的流逝。0表示經過0 的時間,1表示經過100 的時間。2 根據timeinterpolator計算出乙個差值因素。timeinterpolator以第1步流逝的時間作為引數,根據運動規則得出另乙個...

android 屬性動畫

package com.example.objectanimator import android.animation.animator import android.animation.animatorlisteneradapter import android.animation.animato...

Android屬性動畫

在我們的安卓開發中,加入動畫是可以給使用者很好的體驗,今天就簡單的來了解一下動畫 動畫效果有淡入淡出 縮放 平移 旋轉,還有組合動畫 首先在xml檔案中先寫乙個textveiw,接下來就是以textview為例展示一下這些效果 在mainactivity中獲取一下控制項 開始,首先展示一下淡入淡出效...