轉自 點擊打開鏈接
Interpolator屬性是Animation類的一個XML屬性,所以alpha、scale、rotate、translate、set都會繼承得到這個屬性。Interpolator被譯爲插值器,他是一個指定動畫如何變化的屬性,
我們看下api,他的系統值:
accelerate_decelerate_interpolator
描述:在動畫開始與介紹的地方速率改變比較慢,在中間的時候加速
我們可以將其形象的形容下:
accelerate_interpolator
描述:在動畫開始的地方速率改變比較慢,然後開始加速
我們可以將其形象的形容下(默認下感覺和上面的有點像):
anticipate_interpolator
描述: 開始的時候向後甩一點然後向前
我們可以將其形象的形容下:
anticipate_overshoot_interpolator
描述: 開始的時候向後甩一點然後向前超過設定值一點然後返回
我們可以將其形象的形容下:
bounce_interpolator
描述: 動畫結束的時候彈起,類似皮球落地
我們可以將其形象的形容下:
cycle_interpolator
描述:動畫循環播放特定的次數回到原點,速率改變沿着正弦曲線
我們可以將其形象的形容下:
decelerate_interpolator
描述: 在動畫開始的地方快然後慢
我們可以將其形象的形容下:
linear_interpolator
描述:以常量速率改變
我們可以將其形象的形容下:
overshoot_interpolator
描述:向前超過設定值一點然後返回
我們可以將其形象的形容下:
到這裏他的所有屬性都介紹完了,這個屬性不光對translate有用,對其他繼承至Animation的alpha、scale、rotate、translate、set都有作用效果,如果你想看到alpha、scale、rotate、set的作用效果可以至另一位博主的博文,有詳細的演示(傳送門)
這篇博文難道就這樣結束了嗎?在我們平時沒有設置Interpolator屬性,那它的默認值是多少呢?我們不禁想到!很多人可能會以爲是linear_interpolator那是不是呢?
我們找到animation.setInterpolator();
public void setInterpolator(Context context, @InterpolatorRes int resID) {
setInterpolator(AnimationUtils.loadInterpolator(context, resID));
}
它調用了另一個方法()
public void setInterpolator(Interpolator i) {
mInterpolator = i;
}
我們再找下設置它默認值的地方
protected void ensureInterpolator() {
if (mInterpolator == null) {
mInterpolator = new AccelerateDecelerateInterpolator();
}
}
是的找到了,它的默認值是accelerate_decelerate_interpolator