Android 屬性動畫總結

2021-06-28 13:25:05 字數 3177 閱讀 2505

最近工作稍微清閒點,以前發現自己關於動畫這塊特別的弱,抽空學習了下屬性動畫,先總結下。

屬性動畫 從文字含義上就知道,它是通過改變物件的屬性來實現動畫效果。

屬性動畫和補間動畫的區別:

1.補間動畫改變的物件只能是view,屬性動畫可以改變任何物件(對非view物件使用屬性動畫的場景還沒有遇到過,但確實可以)。

2.補間動畫只能改變"alpha","rotate","scale","translate"四個屬性,屬性動畫可以改變任何屬性(屬性必須有個set方法/get方法)。

屬性動畫的實現的步驟:

1.計算各幀對應的屬性值

2.為指定的物件指定計算後的值,並重新整理view

屬性動畫又是如何計算對頂額屬性值了?

這裡就得提到兩個概率。

一 是 計算器(evaluator),它是控制屬性動畫如何計算屬性值(屬性的型別可以是int,float,argb,自己定義的型別)。

對於int,float,argb型別anroid已經提供有現成的intevaluator、floatevaluator、argbevaluator計算器。對於沒有沒有

提供的型別,可以自己繼承type

evaluator 來自定義。

例如:public class mypointevaluator implements typeevaluator}二是

插值(interpolator) 可以理解為控制動畫的變化速度。android提供了幾種

—accelerateinterpolator:動畫從開始到結束,變化率是乙個加速的過程。     

—decelerateinterpolator:動畫從開始到結束,變化率是乙個減速的過程。 

—cycleinterpolator:動畫從開始到結束,變化率是迴圈給定次數的正弦曲線。 

—acceleratedecelerateinterpolator:動畫從開始到結束,變化率是先加速後減速的過程。

—linearinterpolator:動畫從開始到結束,變化率是線性變化。

也可以自定義

interpolator,重寫

getinterpolation方法

public class myinterpolator implements interpolator  

@override 

public float getinterpolation(float input)  

return mfactor; 

} }

使用objectanimator實現動畫

objectanimator.offloat  改變屬性值為float型別的的方式  例如:objectanimator.offloat(m_tv, "x", width); //x為m_tv 的乙個屬性

objectanimator.ofint      

改變屬性值為int型別的的方式     

例如:objectanimator.offloat(m_tv, "y", width); 

//y為m_tv 的乙個屬性

objectanimator.ofobject   

改變屬性值為其他型別的的方式 objectanimator.ofobject(m_atv, "point", 

new mypointevaluator(), new pointf(w, h), new pointf(x, y)); //

point 為 

m_atv的型別為

pointf的屬性

objectanimator.ofpropertyvaluesholder  改變多個屬性值

當我們想一次改變物件的多個屬性的是時候使用 

ofpropertyvaluesholder  方法。例如:

propertyvaluesholder pvhx = propertyvaluesholder.offloat("x", x1,x2);

propertyvaluesholder pvhy = propertyvaluesholder.offloat("y", y1,y2

); objectanimator oa = objectanimator.ofpropertyvaluesholder(m_tv, pvhx,

pvhy);

定義後 objectanimator

後直接呼叫start(),即可執行。

補充: 1.

propertyvaluesholder  

的工廠方法裡面,除了整形ofint()、浮點型offloat()、object型別ofobject()之外,還有一種:ofkeyframe()。

每乙個keyframe還可以擁有自己的interpolator,控制了前乙個關鍵幀到這乙個關鍵幀之間的時間動畫行為。

乙個例如用關鍵幀定義左右搖擺的動畫

propertyvaluesholder pvhtranslatex = propertyvaluesholder.ofkeyframe(view.translation_x,

keyframe.offloat(0f, 0),

keyframe.offloat(.10f, -delta),

keyframe.offloat(.26f, delta),

keyframe.offloat(.42f, -delta),

keyframe.offloat(.58f, delta),

keyframe.offloat(.74f, -delta),

keyframe.offloat(.90f, delta),

keyframe.offloat(1f, 0f)

objectanimator.ofpropertyvaluesholder(view, pvhtranslatex).

setduration(500);

2.

如果動畫的物件是view,為了能顯示動畫效果,可能還需要在onanimationupdate()事件中監聽呼叫view.invalidate()方法來重新整理螢幕顯示。但是view的定義的setter方法,

如setalapha(),settranslationx()等方法,都會自動呼叫invalidate()方法,不需要額外的呼叫

invalidate方法。

Android動畫 屬性動畫總結(一)

屬性動畫是api 11 才引入的新特性,屬性動畫彌補了view動畫的一些不足。屬性動畫可以針對屬性進行動畫而不僅僅是view。但並不是傳遞任何的屬性都能有效果。屬性動畫要求做動畫的物件提供該屬性的get和set方法,屬性動畫根據外界傳遞的該屬性的初始值和最終值,以動畫的效果多次呼叫set方法。屬性動...

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...