屬性動畫是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 跳躍,快到目的值時值...