屬性動畫

一、ValueAnimator

1、基本介紹

  • 屬性動畫的引入是為了彌補視圖動畫的不足,視圖動畫僅能對指定的控件做動畫,而屬性動畫是通過改變控件的某一屬性值來做動畫的。
  • 補間動畫點擊區(qū)域是不變的,依然保持原區(qū)域可點擊狀態(tài)。屬性動畫點擊區(qū)域是可變化的,隨控件的位置改變而改變。

主要方法:

public static ValueAnimator ofInt(int... values);
public static ValueAnimator ofFloat(int... values);
//設(shè)置動畫時長,單位毫秒
ValueAnimator setDuration(long duration);
//獲取ValueAnimator在運動時當(dāng)前運動點的值
Object getAnimatedValue();
//開始動畫
void start();
//設(shè)置循環(huán)次數(shù),設(shè)置為INFINITE表示無限循環(huán)
void setRepeatCount(int value);
//設(shè)置循環(huán)模式value的取值有RESTART和REVERSE
void setRepeatMode(int value);
//取消動畫
void cancel();

向右下角移動動畫 :

ValueAnimator animator = ValueAnimator.ofInt(0,400);
animator.setDuration(1000);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.setRepeatCOunt(ValueAnimator.INFINITE);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
    @Override
    public void onAnimationUpdate(ValueAnimator animation){
        int curValue = animation.getAnimatedValue();
        textView.layout(curValue,curValue,curValue+textView.getWidth(),curValue+getHeight());
    }

});
animator.start();
  • ValueAnimator只負(fù)責(zé)對指定值區(qū)間進行動畫運算。
  • 我們需要對運算過程進行監(jiān)聽,然后自己對控件執(zhí)行動畫操作。
  • 重復(fù)次數(shù)為INFINITE(無限循環(huán))的動畫,當(dāng)Activity結(jié)束的時候,必須調(diào)用cancel()取消動畫,否則動畫將無線循環(huán),從而導(dǎo)致View無法釋放,進一步導(dǎo)致整個Activity無法釋放,最終引起內(nèi)存泄露。

2、添加監(jiān)聽器

①、監(jiān)聽動畫過程中值的變化
public static interface AnimatorUpdateListener{
    void onAnimationUpdate(ValueAnimator animation);
}
②、監(jiān)聽動畫變化的四個階段
public static interface AnimatorListener{
    void onAnimationStart(Animator animation);
    void onAnimationEnd(Animator animation);
    void onAnimationCancel(Animator animation);
    void onAnimationRepeat(Animator animation);//動畫重復(fù)時調(diào)用
}

3、移除監(jiān)聽器

移除AnimatorUpdateListener

void removeUpdateListener(AnimatorUpdateListener listener);
void removeAllUpdateListeners();

移除AnimatorListener

void removeListener(AnimatorListener listener);
void removeAllListeners();

4、其它不常用函數(shù)

延時開始執(zhí)行動畫,單位毫秒

public void setStartDelay(long startDelay);

完全克隆一個ValueAnimator實例,包括它所有的設(shè)置以及所有對監(jiān)聽器代碼的處理

public ValueAnimator clone();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容