Android技術進階的要素之Android屬性動畫

來源:互聯網
上載者:User

由於Android3.0之前就有了許多的動畫架構,其中之一就是Animation,但是隨著時代的發展和互動要求的提高,Animation的局限性也越來越明顯,例如:Anmiation動畫不能響應點擊事件等等。因此,在Android3.0之後,Google推出了新的動畫架構——屬性動畫(Animator)。

而在Animator架構中使用最多的就是AnimatorSet和ObjectAnimator的配合,使用ObjectAnimator進行更加精細化的控制,只控制一個對象的一個屬性值,而使用多個ObjectAnimator組合到AnimatorSet形成一個動畫。並且ObjectAnimator能夠自動驅動,可以調用SetFrameDelay(longframeDelay)設定動畫幀之間的間隙時間,調整幀率,減少動畫過程中頻繁的繪製介面,而在不影響動畫效果的前提下減少了CPU的資源消耗。

接下來就看看屬性動畫中最基礎的ObjectAnimator。

先看看基本的用法格式:

      (View tv) {        animator = ObjectAnimator.ofFloat(tv, , );        animator.setDuration();        animator.start();    }

tv是一個控制項,“alpha”是一個字串格式的屬性值,除了這個屬性值,還有

translationY 、translationX :這兩個屬性作為一種增量來控制著View對象從版面配置容器的左上方座標位移的位置
rotation、rotationX、rotationY:控制View對象圍繞支點進行2D和3D旋轉。
scaleX、scaleY :控制View對象圍繞支點進行2D縮放
prvotX、pivotY :控制控制項圍繞這個點進行縮放變換處理
x、y: 描述的是View對象在它的容器中的最終位置,它最初的左上方座標和translationY 、translationX值的累積和。
alpha 控制透明度

這個是針對一個對象一個屬性的用法,如果是有多個屬性,那就要用到PropertyValuesHolder

比如現在要實現一個平移縮放的動畫效果,那具體的做法就是:

          () {        PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat(                , f);        PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat(, f,                );        PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat(, f,                );        ObjectAnimator.ofPropertyValuesHolder(tv, pvh1, pvh2, pvh3)                .setDuration().start();    }

其實用法跟AnimationSet類似,同時,也跟我們後面要講的AnimatorSet的用法類似。

接下來,再看看另外在屬性動畫裡面佔有很重要的地位的類——ValueAnimator

這個類其實相當強大,就連ObjectAnimator也是繼承它的。它本身不帶有動畫效果,但是它能產生許多的有規律的數字,那麼我們有了這個數字,當然也可以實現動畫的效果了,比如下面的這個用法:

      () {        final ValueAnimator animator =ValueAnimator.ofFloat(,);        animator.setTarget(tv);        animator.setDuration().start();        animator.addUpdateListener( AnimatorUpdateListener() {            @Override              (ValueAnimator arg0) {                  =() arg0.getAnimatedValue();                ViewGroup.LayoutParams layoutParams = layout.getLayoutParams();                layoutParams.height =() ;                layout.setLayoutParams(layoutParams);            }        });    }

這裡是通過有這寫資料,來不斷的設定View的高度,實現一個動畫的效果。

最後來看看AnimatorSet,前面提到過,它的用法和PropertyValuesHolder 是很相似的,但是不同的是,它可以實現多個對象和多種屬性的同時動畫效果,大概的用法如下:

      oneAnimatorSet(){        ObjectAnimator animator=ObjectAnimator.ofFloat(tv, , );        ObjectAnimator animator2=ObjectAnimator.ofFloat(tv, , ,,);        ObjectAnimator animator3=ObjectAnimator.ofFloat(tv, ,  ,,);        AnimatorSet  =  AnimatorSet();        .setDuration();        .playTogether(animator,animator2,animator3);        .start();    }

在屬性動畫中,Animator正是通過playTogether(),with()、before等等方法來控制協調的,這樣就是實現對動畫播放的順序精確控制。

今天只是簡單的認識一下基本用法,我會在後期的學習中,推出具有實戰意義的動畫效果。謝謝閱讀。

最後,感謝徐宜生大神。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.