Android 屬性動畫:基本知識總結

提綱:文章寫了什麼?

  1. 什麼是屬性動畫?
  2. 屬性動畫相關接口及常用類
  3. ValueAnimator
  4. ObjectAnimator
  5. 估值器
  6. 差值器

屬性動畫,顧名思義就是:沿着一定的時間順序,通過改變View的屬性,從而得到的動畫的效果。引入屬性動畫最大的作用就是爲了“眼見爲實”,對於ViewAnimation,動畫的移動和縮放並沒有真正的改變控件的位置和熱區,而屬性動畫則可以做到這一點。

Interface:

這裏寫圖片描述

Class:

這裏寫圖片描述

這裏要着重記錄的是這幾個類:

  • ValueAnimator 屬性動畫的核心類
  • ObjectAnimator 繼承 ValueAnimator 對ValueAnimator進行了一層封裝
  • AnimatorSet 可以同時運行一組動畫
  • PropertyValuesHolder 他代表一個在動畫運行中需要過度到的值。
  • TypeEvaluator 實現此接口的實例,將決定AnimatorUpdateListener接收到的值。

這裏有必要說明一下,上面對動畫的描述是“運行”,而不是“播放”。因爲屬性動畫的本質是在指定的時間內於指定的值之間過度。這就意味着他並不僅限於View控件。舉例來說,他可以是一個不斷運動的看不見的點,而你在需要的時候可以通過回調知道在某一時間點對應的值,從而進行canvas的繪製。

ValueAnimator

繼承自Animator:

這裏寫圖片描述

常用的方法有:

這裏寫圖片描述

用法如下:

 // 空構造方法
     ValueAnimator animator = new ValueAnimator();

     // 創建一個實例 ,開始點0f,結束點位100f,期間經過50
    ValueAnimator animator = ValueAnimator.ofFloat(0, 50 ,100);

    // 創建一個實例 ,開始點0f,結束點位100
    ValueAnimator animator = ValueAnimator.ofInt(0, 100);

    //創建一個實例 ,開始點0,結束點位100,自定義返回的類型
    ValueAnimator animator = ValueAnimator.ofObject(new TypeEvaluator() {
            @Override
            public Object evaluate(float fraction, Object startValue, Object endValue) {
                // 這裏的三個值分別代表了:一個0~1的float, 開始點, 結束點
                return new XXX()
            }
        } , 0 , 100);

ObjectAnimator

繼承自ValueAnimator:

這裏寫圖片描述

設置動畫的方法有:

這裏寫圖片描述

具體用法:

 ObjectAnimator.ofFloat(view , rotationX , 0.0f , 360f)
                .setDuration(2000)
                .start();

估值器

定義及常見的估值器如下:

這裏寫圖片描述

使用,PositionEvaluator() 是自定義的估值器:

ValueAnimator animator = ValueAnimator.ofObject(
                new PositionEvaluator(),
                createPoint(RADIUS, RADIUS),
                createPoint(getWidth() - RADIUS, getHeight() - RADIUS));
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                currentPoint = (PositionPoint) animation.getAnimatedValue();
                invalidate();
            }
        });

插值器

在屬性動畫一章中,我們提到最多的就是動畫的時間概念,插值器就是對時間進行修改的東西,比如說你閒的蛋疼,走斑馬線的時候只踩白塊,這是線性的運動軌跡,而這時候突然在其中某些白塊中間又插入了幾個距離不相等的白塊,你的步伐就不一樣了,移動速度也收到了影響,這就是插值器所做的勾當。

Android 定義好的一些常用插值器:

AccelerateDecelerateInterpolator 慢 - 快- 慢
AccelerateInterpolator 慢 - 快
DecelerateInterpolator 快 - 慢
AnticipateInterpolator 開始的時候向後然後向前甩
AnticipateOvershootInterpolator 開始的時候向後然後向前甩一定值後返回最後的值
BounceInterpolator 動畫結束的時候彈起
CycleInterpolator 動畫循環播放特定的次數,速率改變沿着正弦曲線
LinearInterpolator 以常量速率改變
OvershootInterpolator 向前甩一定值後再回到原來位置

使用:

animation.setInterpolator(new DecelerateInterpolator());

參考致謝:
(1)、DOC
(2)、探索安卓中有意義的動畫!
(3)、 Android 動畫

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