Android動畫(2)--TweenAnimation(補間動畫)

本節我們來講補間動畫

補間動畫的實現方式,補間動畫則是通過特定算法在兩個關鍵幀之間補充漸變的動畫效果來實現的。補間動畫的優點是可以節省空間。
這裏寫圖片描述

補間動畫如下:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <!--
     透明度控制動畫效果 alpha
        浮點型值:
            fromAlpha 屬性爲動畫起始時透明度
            toAlpha   屬性爲動畫結束時透明度
            說明:
                0.0表示完全透明
                1.0表示完全不透明
            以上值取0.0-1.0之間的float數據類型的數字

        長整型值:
            duration  屬性爲動畫持續時間
            說明:
                時間以毫秒爲單位
    -->
</set>
 <rotate
        android:duration="3000"
        android:fromDegrees="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+180"

        />
    <!--
     rotate 旋轉動畫效果
       屬性:interpolator 指定一個動畫的插入器
             在我試驗過程中,使用android.res.anim中的資源時候發現
             有三種動畫插入器:
                accelerate_decelerate_interpolator   加速-減速 動畫插入器
                accelerate_interpolator               加速-動畫插入器
                decelerate_interpolator               減速- 動畫插入器
             其他的屬於特定的動畫效果

       浮點數型值:
            fromDegrees 屬性爲動畫起始時物件的角度
            toDegrees   屬性爲動畫結束時物件旋轉的角度 可以大於360度


            說明:
                     當角度爲負數——表示逆時針旋轉
                     當角度爲正數——表示順時針旋轉
                     (負數from——to正數:順時針旋轉)
                     (負數from——to負數:逆時針旋轉)
                     (正數from——to正數:順時針旋轉)
                     (正數from——to負數:逆時針旋轉)

            pivotX     屬性爲動畫相對於物件的X座標的開始位置
            pivotY     屬性爲動畫相對於物件的Y座標的開始位置

            說明:        以上兩個屬性值 從0%-100%中取值
                         50%爲物件的X或Y方向座標上的中點位置

        長整型值:
            duration  屬性爲動畫持續時間
            說明:       時間以毫秒爲單位

    -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fillAfter="true">


    <scale
        android:duration="1000"
        android:fillAfter="false"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.4"
        android:toYScale="1.4" />

<!--
     尺寸伸縮動畫效果 scale
       屬性:interpolator 指定一個動畫的插入器
        在我試驗過程中,使用android.res.anim中的資源時候發現
        有三種動畫插入器:
            accelerate_decelerate_interpolator  加速-減速 動畫插入器
            accelerate_interpolator        加速-動畫插入器
            decelerate_interpolator        減速- 動畫插入器
        其他的屬於特定的動畫效果
   AnticipateOvershootInterpolator 開始的時候向後然後向前甩一定值後返回最後的值

  BounceInterpolator   動畫結束的時候彈起

  CycleInterpolator 動畫循環播放特定的次數,速率改變沿着正弦曲線

  DecelerateInterpolator 在動畫開始的地方快然後慢

  LinearInterpolator   以常量速率改變

  OvershootInterpolator    向前甩一定值後再回到原來位置



      浮點型值:

            fromXScale 屬性爲動畫起始時 X座標上的伸縮尺寸
            toXScale   屬性爲動畫結束時 X座標上的伸縮尺寸

            fromYScale 屬性爲動畫起始時Y座標上的伸縮尺寸
            toYScale   屬性爲動畫結束時Y座標上的伸縮尺寸

            說明:
                 以上四種屬性值

                    0.0表示收縮到沒有
                    1.0表示正常無伸縮
                    值小於1.0表示收縮
                    值大於1.0表示放大

            pivotX     屬性爲動畫相對於物件的X座標的開始位置
            pivotY     屬性爲動畫相對於物件的Y座標的開始位置

            說明:
                    以上兩個屬性值 從0%-100%中取值
                    50%爲物件的X或Y方向座標上的中點位置

        長整型值:
            duration  屬性爲動畫持續時間
            說明:   時間以毫秒爲單位

        布爾型值:
            fillAfter 屬性 當設置爲true ,該動畫轉化在動畫結束後被應用

-->
</set>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">


    <translate
        android:duration="2000"
        android:fromXDelta="30"
        android:fromYDelta="30"
        android:toXDelta="-80"
        android:toYDelta="300" />
    <!--
     translate 位置轉移動畫效果
        整型值:
            fromXDelta 屬性爲動畫起始時 X座標上的位置
            toXDelta   屬性爲動畫結束時 X座標上的位置
            fromYDelta 屬性爲動畫起始時 Y座標上的位置
            toYDelta   屬性爲動畫結束時 Y座標上的位置
            注意:
                     沒有指定fromXType toXType fromYType toYType 時候,
                     默認是以自己爲相對參照物
        長整型值:
            duration  屬性爲動畫持續時間
            說明:   時間以毫秒爲單位
    -->
</set>

我想大家看了這些例子已經領會了很多了,下面我們講講AnimationSet

AnimationSet

這個是一種動畫分組的,

android:shareInterpolator="true"   //是否共享Interpolator   android:interpolator="@android:anim/accelerate_decelerate_interpolator"    
//interpolator  加減速控制
    android:duration="3000"   //該組動畫時間
    android:fillAfter="false" //是否停留在最後一幀動畫
    //這裏還有一個操作叫fillbefore  ,是否停留在開始一幀

set的例子如下

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>
//此處爲兩個動畫組。

以上五種類型分別的使用方法如下:

ImageView image = (ImageView) findViewById(R.id.imageview);
        Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
        image.startAnimation(hyperspaceJump);

對應的xml類型有android 的java代碼的使用方法

 // TODO Auto-generated method stub
                // 1&2: 確定起始狀態,結束狀態
                TranslateAnimation tAnim = new TranslateAnimation(0, 400, 0, 0);//橫向位移400個單位
                RotateAnimation rAnima = new RotateAnimation(0, 70);//順時針旋轉70度
                ScaleAnimation sAnima = new ScaleAnimation(0, 5, 0, 5);//橫向放大5倍,縱向放大5倍
                AlphaAnimation aAnima = new AlphaAnimation(1.0f, 0.0f);//從全不透明變爲全透明
                // 3: 確定持續時間
                tAnim.setDuration(2000);
                rAnima.setDuration(2000);
                sAnima.setDuration(2000);
                aAnima.setDuration(2000);

                // 4: 確定Interpolator
                tAnim.setInterpolator(new AccelerateDecelerateInterpolator());

                // 啓動動畫
                translation.startAnimation(tAnim);
                rotate.startAnimation(rAnima);
                scale.startAnimation(sAnima);
                alpha.startAnimation(aAnima);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章