Android之屬性動畫(二),android灞炴€у姩鐢?/a>android鍔ㄧ敾

來源:互聯網
上載者:User

Android之屬性動畫(二),android灞炴€у姩鐢?/a>android鍔ㄧ敾

  上一篇文章(連結:http://www.cnblogs.com/jerehedu/p/4458928.html  ),我們對屬性動畫有了簡單的認識,並實際動手使用ObjectAnimator、AnimatorSet完了一個簡單的例子,本次繼續對剩餘內容進行學習。

  首先讓我們先來瞭解一下動畫是如何計算的呢?從官方文檔上我們可以看到下面這張圖:

 

  圖中描述了動畫過程中相互工作的主要類,其中ValueAnimator對象可以記錄動畫時間軌跡。ValueAnimator中含有一個TimeInterpo;ator,此屬性用於描述動畫的時間插值;含有一個TypeEvaluator,此屬性用於指定動畫屬性值是如何被計算出來的。

  建立一個ValueAnimator並啟動動畫後,ValueAnimator在動畫運行期間會計算一個0到1的分數,這個分數用於表示整個動畫啟動並執行百分比。當ValueAnimator計算好一個運行分數後,會調用當前設定的TimeInterpolator去計算插值分數;插值分數計算好後,ValueAnimator調用TypeEvaluator根據插值分數計算屬性的值。

  這裡的ValueAnmiator就是我們在上一章中使用的ObjectAnimator的父類,需要注意的是ValueAnimator不會直接操作一個對象或者屬性,也就意味著我們如果想使用ValueAnimator完成動畫,就必須為ValueAnimator添加一個監聽器:

                ValueAnimator animator = ValueAnimator.ofFloat(0.0f, 360f);                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {                    @Override                    public void onAnimationUpdate(ValueAnimator animation) {                        //當前動畫進度                        float curValue = (Float) animation.getAnimatedValue();                        imageView.setRotationX(curValue);                    }                });                animator.setDuration(4000);                animator.setInterpolator(new DecelerateInterpolator());                animator.start();

  

  當ValueAnimator的ofInt、ofFloat不能滿足需求是,我們可以使用ofObject方法,這時候需要繼承TypeEvaluaot<T>自訂即可。

  除了AnimatorUpdateListener之外,屬性動畫架構為我們提供了Animator.AnimatorListener監聽器:

  Android提供了一個此監聽器的預設實現AnimatorListenerAdapter,我們只需要繼承此類即可,參考代碼如下:

animator.addListener(new AnimatorListenerAdapter() {                    @Override                    public void onAnimationEnd(Animator animation) {                        PropertyValuesHolder holderX =PropertyValuesHolder.ofFloat("translationX",0f,260f);                        PropertyValuesHolder holderY=PropertyValuesHolder.ofFloat("translationY",0f,260f);                        ObjectAnimator.ofPropertyValuesHolder(imageView,holderX,holderY)                                .setDuration(4000)                                .start();                    }                });

  屬性動畫中常用的屬性有:

TranslationX、TranslatioinY:相對於版面配置容器的左邊和上邊的座標值

Rotation、rotationX、rotationY:旋轉屬性

scalX、scalY:縮放屬性

pivotX、pivotY:設定旋轉、縮放時的中心點

x、y:座標

alpha:透明度

  和view動畫一樣,除了使用java程式碼完成動畫外,我們同樣可以使用xml文檔來編寫屬性動畫。要注意的是xml檔案的目錄不再是anim,而是要在res下建立一個animator檔案夾用於存放。

  Xml代碼如下:

<set xmlns:android="http://schemas.android.com/apk/res/android"    android:ordering="sequentially">    <set android:ordering="together">        <objectAnimator android:propertyName="translationX"            android:valueFrom="0"            android:valueTo="260"            android:duration="2000"            android:valueType="floatType"/>        <objectAnimator android:propertyName="translationY"            android:valueFrom="0"            android:valueTo="260"            android:valueType="floatType"            android:duration="2000"/>    </set>    <objectAnimator        android:propertyName="alpha"        android:valueFrom="1"        android:valueTo="0"        android:duration="2000"/></set>

  在java中使用:

AnimatorSet animatorSet = (AnimatorSet)AnimatorInflater.loadAnimator(this,R.animator.myanimator);                animatorSet.setTarget(imageView);                animatorSet.start();

 

  想要深入學習的同學,可以點擊下載源碼,查看更多詳細內容!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.