Android動畫知識回顧--ValueAnimator屬性動畫

ValueAnimator屬性動畫學是學了,代碼也能寫出了,但是讓我自己講一講就嘿嘿嘿,主要是腦子有點亂,先說下我個人對ValueAnimator的理解。

就ValueAnimator類來說,我們常用的主要有三個方法:


public static ValueAnimator ofInt(int... values)
public static ValueAnimator ofFloat(float... values)
public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values);

簡單使用最主要的還是要和AnimatorUpdateListener搭配着

ValueAnimator animator = ValueAnimator.ofFloat(0f,400f,50f,300f);
animator.setDuration(3000);
 
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Float curValueFloat = (Float)animation.getAnimatedValue();
        int curValue = curValueFloat.intValue();
        tv.layout(curValue,curValue,curValue+tv.getWidth(),curValue+tv.getHeight());
    }
});
animator.start();

設置監聽器調用getAnimatedValue()方法獲取返回值,對目標View進行動畫操作。

但是有些情況就不行了 比如你要操作字符變換,或者系統提供測插值器無法做到你要的效果,這時候就需要我們定製Interpolator(插值器:決定動畫的變化模式,線性運動和非線性運動)和Evaluator(估值器:決定變化中某一時刻的具體數值)了。詳細細節請看啓艦大神的博客。

我要說的是在重寫Evaluator的時候,一定要注意這個方法:

public T evaluate(float fraction, T startValue, T endValue);

該方法返回值計算:startValue+ fraction * (endValue - startValue))

如果你需要float 類型還好說,無需再做任何操作,但是如果你需要的是Int類型,則返回值一定有重複的,這就需要你做優化操作,畢竟動畫很消耗性能的。目前由於個人能力有限想不到如何evaluate方法內過濾重複數據,我一般都是在AnimatorUpdateListener類中getAnimatedValue()方法中過濾重複數據。如果有人有更好的想法,勞煩分享我一下,在這裏先謝過了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章