Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android使用屬性動畫代替補間動畫

android使用屬性動畫代替補間動畫

編輯:關於Android編程

本文參考Android屬性動畫完全解析(上),初識屬性動畫的基本用法

android3.0之前一共有兩種動畫,分別是frame動畫和tween動畫,關於這兩種動畫如果不了解可以查看我之前的文章android之frame動畫詳解 和android之tween動畫詳解 ,frame動畫就是逐幀動畫,把多張圖片放在一起連續播放實現一種類似於gif圖片的動畫效果,tween動畫就是補間動畫,主要是對圖像進行平移,縮放,旋轉,改變透明度等。

tween動畫被稱作View Animation,第一句就說的很清楚了,你可以使用View Animation System 來在View上實現tween動畫。也就是說tween動畫只能作用在view上,可是如果我們想變換一個自定義View的顏色該怎麼辦?抱歉,tween無法做到。

android3.0推出了一種新的動畫實現方式,那就是屬性動畫,屬性動畫,顧名思義,就是作用在View的屬性上,我們可以讓View的屬性實現動畫效果。

說到這裡我們不得不介紹ObjectAnimator類,這個也是在實際開發中用的最多的,追根溯源,我們發現ObjectAnimator繼承自ValueAnimator,ValueAnimator可以幫助我們實現一些簡單的數值的變化,不過到目前為止還沒用上這個東東。

下面我們先來看看怎麼使用屬性動畫來實現tween動畫效果:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv, alpha, 1f,
                    0.5f);
            animator.setDuration(5000);
            animator.start();

我們通過ofFloat方法來獲得一個ObjectAnimator實例,先看看該方法的源碼:

    public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) {
        ObjectAnimator anim = new ObjectAnimator(target, propertyName);
        anim.setFloatValues(values);
        return anim;
    }

從源碼中可以看到該方法接收N個參數,第一個是我們要設置動畫的對象,第二個參數給哪個屬性設置動畫,後面兩個參數表示控件從不透明變為半透明,後面的參數可以傳N多個,比如

ObjectAnimator animator = ObjectAnimator.ofFloat(tv, alpha, 1f,
                    0.5f,1f,0f);

表示控件從不透明到半透明再到不透明,最後到全透明這樣一個狀態。有了這個例子之後,我想要實現其他tween動畫實現的效果都不是問題了。

旋轉:

ObjectAnimator animator2 = ObjectAnimator.ofFloat(tv2, rotation,
                    0f, 360f);
            animator2.setDuration(5000);
            animator2.start();

平移:

float curTranslationX = tv.getTranslationX();
            ObjectAnimator animator = ObjectAnimator.ofFloat(tv,
                    translationX, curTranslationX, -1000f, curTranslationX);
            animator.setDuration(3000);
            animator.start();

如果要實現組合動畫效果呢?

ObjectAnimator moveIn = ObjectAnimator.ofFloat(tv, translationX,
                    -500f, 0f);
            ObjectAnimator rotate = ObjectAnimator.ofFloat(tv, rotation, 0f,
                    360f);
            ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(tv, alpha, 1f,
                    0f, 1f);
            AnimatorSet animSet = new AnimatorSet();
            animSet.play(rotate).with(fadeInOut).after(moveIn);
            animSet.setDuration(5000);
            animSet.start();

哈哈,還是很簡單吧。
這裡有一個需要注意的地方就是:


    // after(Animator anim) 現有動畫在傳入的動畫之後執行
    // after(long delay) 現有動畫延遲指定毫秒後執行
    // before(Animator anim) 現有動畫在傳入的動畫之前執行
    // with(Animator anim) 現有動畫和傳入的動畫同時執行

當然,屬性動畫和tween動畫一樣,即可以使用代碼實現也可以使用xml來實現,那麼我們看看怎麼通過xml文件來實現屬性動畫:



    

    
        

        
            
            
        
    

android:ordering的值為together表示各個維度的變化同時發生,缺省值也是together,sequentially表示動畫依次發生。

基本上就是這樣。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved