Android 屬性動畫跟插值器估值器

2021-07-11 00:14:30 字數 2031 閱讀 7643

屬性動畫是android api11之後加入的。其建立過程同樣分為**動態建立跟xml靜態建立。

主要有三類:valueanimator,objectanimator,animatorset。以動態建立為例,xml中建立跟tween動畫類似。(唯一區別是使用animatorinflater.loadanimator()來載入動畫,用settarget(object)來將動畫放到物件上)(在實際開發中建議使用**來動態建立屬性動畫)

objectanimator.offloat(objanimator,"translationx", objanimator.getwidth()/3).start();

valueanimator coloranimator=objectanimator.ofint(valueanimator,"backgroundcolor",0xffff8080,0xff8080ff);

coloranimator.setduration(2500);

coloranimator.setevaluator(newargbevaluator());

coloranimator.setrepeatcount(valueanimator.infinite);//動畫重複次數

coloranimator.setrepeatmode(valueanimator.reverse);

coloranimator.start();

當然也可以新增對應的屬性變化監聽:

coloranimator.addupdatelistener(newanimatorupdatelistener() 

});

其中current獲得的就是動畫當前的屬性值,可以根據當前屬性值對v物件進行相關改變。

animatorset set =new animatorset();

set.playtogether(

objectanimator.offloat(animatorset,"scalex", 1,1.5f),

objectanimator.offloat(animatorset,"scaley", 1,1.5f),

objectanimator.offloat(animatorset,"alpha", 1,0.25f,1)

);set.setduration(4000).start();

注意,在使用屬性動畫改編物件的屬性時,物件必須提供對應屬性的set,get方法。

例如,當要更改button的寬度時一般是這麼做:

objectanimator.ofint(btn,"width", 300).setduration(4000).start();

只不過上面這段**不起作用,因為button繼承自textview,而textview的setwidth方法不是設定view的寬度。所以上面屬性動畫無效。

可以更改為如下:

static  class targetview

public int getwidth()

public void setwidth(int width)

}

targetview targetview =new targetview(btn);

objectanimator.ofint(targetview,"width", 300).setduration(4000).start();

timeinterpolator時間插值器,linearinterpolator(線性插值器,勻速動畫),acceleratedecelerateinterpolator(加速減速插值器,兩頭慢中間快),deceleraterinterpolator(減速插值器)

typeevaluator型別估值演算法(估值器)有intevaluator,floatevaluator,argbevaluator。其中動畫的預設重新整理率為10ms/幀。

interpolater插值器與屬性動畫的使用

屬性動畫 連同控制項本身一起動畫 所有的屬性動畫都是繼承於animator的,animator下分為valueanimator與viewpropertyanimator 其中valueanimator下又分為objectanimator 改變乙個屬性,如只改便拉伸x,拉伸y,與animatorset...

動畫插值器

插值器 就是乙個函式,將時間t經過乙個函式的變換對映到t 從而影響動畫的運動軌跡和速度變化 android系統提供的預設插值器 acceleratedecelerateintepolator 動畫開始與結束的地方速率改變比較慢,在中間的時候加速 accelerateinterpolator 動畫開始...

9中動畫插值器

accelerateinterpolator 加速,開始時慢中間加速 decelerateinterpolator 減速,開始時快然後減速 acceleratedecelerateinterolator 先加速後減速,開始結束時慢,中間加速 bounceinterpolator 跳躍,快到目的值時值...