天天看點

【移動開發】Android Animation 動畫效果總結

1.Android的animation由四種類型組成:

XML中

alpha

漸變透明度動畫效果

scale

漸變尺寸伸縮動畫效果

translate

畫面轉換位置移動動畫效果

rotate

畫面轉移旋轉動畫效果

JavaCode中

AlphaAnimation

ScaleAnimation

TranslateAnimation

RotateAnimation

2.Animation主要有兩種動畫模式:

   一種是tweened animation(漸變動畫)

JavaCode

一種是frame by frame(畫面轉換動畫)

3.如何在XML檔案中定義動畫

① 打開Eclipse,建立Android工程

② 在res目錄中建立anim檔案夾

③ 在anim目錄中建立一個myanim.xml(注意檔案名小寫)

④ 加入XML的動畫代碼

1

2

3

4

5

6

7

<code>&lt;?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?&gt;</code>

<code>&lt;</code><code>set</code> <code>xmlns:android=</code><code>"http://schemas.android.com/apk/res/android"</code><code>&gt;</code>

<code>    </code><code>&lt;alpha/&gt;</code>

<code>    </code><code>&lt;scale/&gt;</code>

<code>    </code><code>&lt;translate/&gt;</code>

<code>    </code><code>&lt;rotate/&gt;</code>

<code>&lt;/</code><code>set</code><code>&gt;</code>

4.Android動畫解析--XML

&lt;alpha&gt; 透明度

8

<code>&lt;</code><code>set</code> <code>xmlns:android=</code><code>"http://schemas.android.com/apk/res/android"</code> <code>&gt;</code>

<code>    </code><code>&lt;alpha</code>

<code>        </code><code>android:fromAlpha=</code><code>"0.1"</code>

<code>        </code><code>android:toAlpha=</code><code>"1.0"</code>

<code>        </code><code>android:duration=</code><code>"3000"</code>

<code>    </code><code>/&gt;</code>

注釋:

fromAlpha(浮點型值) 屬性為動畫起始時透明度, 0.0表示完全透明

    toAlpha(浮點型值) 屬性為動畫結束時透明度, 1.0表示完全不透明.

    fromAlpha 和 toAlpha 的取值在0.0-1.0之間的float資料類型的數字

    duration(長整型值) 屬性為動畫持續時間,時間以毫秒為機關

&lt;scale&gt; 縮放

9

10

11

12

13

14

15

16

17

<code>  </code><code>&lt;scale</code>

<code>    </code><code>android:interpolator= </code><code>"@android:anim/accelerate_decelerate_interpolator"</code>

<code>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  </code> 

<code>    </code><code>android:fromXScale=</code><code>"0.0"</code>

<code>    </code><code>android:toXScale=</code><code>"1.4"</code>

<code>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           </code> 

<code>    </code><code>android:fromYScale=</code><code>"0.0"</code>

<code>    </code><code>android:toYScale=</code><code>"1.4"</code>

<code>    </code><code>android:pivotX=</code><code>"50%"</code>

<code>    </code><code>android:pivotY=</code><code>"50%"</code>

<code>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          </code> 

<code>     </code><code>android:fillAfter=</code><code>"false"</code>

<code>    </code><code>android:duration=</code><code>"700"</code> <code>/&gt;</code>

interpolator 指定一個動畫的插入器在我試驗過程中,使用android.res.anim中的資源時候發現有三種動畫插入器:

       accelerate_decelerate_interpolator  加速-減速 動畫插入器

       accelerate_interpolator             加速-動畫插入器

       decelerate_interpolator             減速- 動畫插入器

其他的屬于特定的動畫效果

   A.浮點型值:

       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方向坐标上的中點位置

   B.長整型值:

       duration 屬性為動畫持續時間

       說明: 時間以毫秒為機關

   C.布爾型值:

       fillAfter 屬性 當設定為true ,該動畫轉化在動畫結束後被應用

&lt;translate&gt;  移動

<code>    </code><code>&lt;translate</code>

<code>        </code><code>android:fromXDelta=</code><code>"30"</code>

<code>        </code><code>android:toXDelta=</code><code>"-80"</code>

<code>        </code><code>android:fromYDelta=</code><code>"30"</code>

<code>        </code><code>android:toYDelta=</code><code>"300"</code>

<code>        </code><code>android:duration=</code><code>"2000"</code>

<code>        </code><code>/&gt;</code>

   整型值:

       fromXDelta 屬性為動畫起始時 X坐标上的位置

       toXDelta 屬性為動畫結束時 X坐标上的位置

       fromYDelta 屬性為動畫起始時 Y坐标上的位置

       toYDelta 屬性為動畫結束時 Y坐标上的位置

注意:

      沒有指定fromXType toXType fromYType toYType 時候,預設是以自己為相對參照物

   長整型值:

       duration 屬性為動畫持續時間,時間以毫秒為機關

&lt;rotate&gt;  旋轉

<code>    </code><code>&lt;rotate</code>

<code> </code><code>android:interpolator=</code><code>"@android:anim/accelerate_decelerate_interpolator"</code>

<code>        </code><code>android:fromDegrees=</code><code>"0"</code>

<code>        </code><code>android:toDegrees=</code><code>"+350"</code>

<code>        </code><code>android:pivotX=</code><code>"50%"</code>

<code>        </code><code>android:pivotY=</code><code>"50%"</code>

<code>        </code><code>android:duration=</code><code>"3000"</code> <code>/&gt;</code>

   屬性:interpolator 指定一個動畫的插入器有三種動畫插入器:

               accelerate_decelerate_interpolator 加速-減速 動畫插入器

               accelerate_interpolator 加速-動畫插入器

               decelerate_interpolator 減速- 動畫插入器

   其他的屬于特定的動畫效果

       A.浮點數型值:

           fromDegrees 屬性為動畫起始時物件的角度

           toDegrees 屬性為動畫結束時物件旋轉的角度 可以大于360度

       當角度為負數——表示逆時針旋轉

       當角度為正數——表示順時針旋轉

       (負數from——to正數:順時針旋轉)

       (負數from——to負數:逆時針旋轉)

       (正數from——to正數:順時針旋轉)

       (正數from——to負數:逆時針旋轉)

   pivotX 屬性為動畫相對于物件的X坐标的開始位置

   pivotY 屬性為動畫相對于物件的Y坐标的開始位置

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

       B.長整型值:

               duration 屬性為動畫持續時間,時間以毫秒為機關

如何使用XML中的動畫效果

<code>/**</code>

<code>*Context  為程式的上下文</code>

<code>*id  為動畫XML檔案的引用</code>

<code>**/</code>

<code>public</code> <code>static</code> <code>Animation loadAnimation (Context context, </code><code>int</code> <code>id)</code>

<code>//例子:</code>

<code>myAnimation= AnimationUtils.loadAnimation(</code><code>this</code><code>,R.anim.my_action);</code>

<code>//使用AnimationUtils類的靜态方法loadAnimation()來加載XML中的動畫XML檔案</code>

5.Android動畫解析--JavaCode

 A.AlphaAnimation

       ① AlphaAnimation類對象定義

<code>private</code> <code>AlphaAnimation myAnimation_Alpha;</code>

② AlphaAnimation類對象構造    

<code>AlphaAnimation(float fromAlpha, float toAlpha)</code>

<code>//第一個參數fromAlpha為 動畫開始時候透明度</code>

<code>//第二個參數toAlpha為 動畫結束時候透明度</code>

<code>myAnimation_Alpha=</code><code>new</code> <code>AlphaAnimation(</code><code>0</code><code>.1f, </code><code>1</code><code>.0f);</code>

<code>//說明:</code>

<code>// 0.0表示完全透明</code>

<code>// 1.0表示完全不透明</code>

<code>myAnimation_Alpha.setDuration(</code><code>5000</code><code>);</code>

<code>//設定時間持續時間為 5000毫秒</code>

③ 設定動畫持續時間

 B.ScaleAnimation

  ① ScaleAnimation類對象定義

       ② ScaleAnimation類對象構造

18

19

<code>ScaleAnimation(float fromX, float toX, float fromY, float toY,</code>

<code>int</code> <code>pivotXType, float pivotXValue, </code><code>int</code> <code>pivotYType, float pivotYValue)</code>

<code>//第一個參數fromX為動畫起始時 X坐标上的伸縮尺寸</code>

<code>//第二個參數toX為動畫結束時 X坐标上的伸縮尺寸</code>

<code>//第三個參數fromY為動畫起始時Y坐标上的伸縮尺寸</code>

<code>//第四個參數toY為動畫結束時Y坐标上的伸縮尺寸</code>

<code>/*說明:</code>

<code>以上四種屬性值</code>

<code>0.0表示收縮到沒有</code>

<code>1.0表示正常無伸縮</code>

<code>值小于1.0表示收縮</code>

<code>值大于1.0表示放大</code>

<code>*/</code>

<code>//第五個參數pivotXType為動畫在X軸相對于物件位置類型</code>

<code>//第六個參數pivotXValue為動畫相對于物件的X坐标的開始位置</code>

<code>//第七個參數pivotXType為動畫在Y軸相對于物件位置類型</code>

<code>//第八個參數pivotYValue為動畫相對于物件的Y坐标的開始位置</code>

<code>myAnimation_Scale =</code><code>new</code> <code>ScaleAnimation(</code><code>0</code><code>.0f, </code><code>1</code><code>.4f, </code><code>0</code><code>.0f, </code><code>1</code><code>.4f,</code>

<code>Animation.RELATIVE_TO_SELF, </code><code>0</code><code>.5f, Animation.RELATIVE_TO_SELF, </code><code>0</code><code>.5f);</code>

<code>myAnimation_Scale.setDuration(</code><code>700</code><code>);</code>

<code>//設定時間持續時間為 700毫秒</code>

C.TranslateAnimation

① TranslateAnimation類對象定義

       ② TranslateAnimation類對象構造

<code>TranslateAnimation(float fromXDelta, float toXDelta,</code>

<code>float fromYDelta, float toYDelta)</code>

<code>//第一個參數fromXDelta為動畫起始時 X坐标上的移動位置</code>

<code>//第二個參數toXDelta為動畫結束時 X坐标上的移動位置</code>

<code>//第三個參數fromYDelta為動畫起始時Y坐标上的移動位置</code>

<code>//第四個參數toYDelta為動畫結束時Y坐标上的移動位置</code>

       ③ 設定動畫持續時間

<code>myAnimation_Translate.setDuration(</code><code>2000</code><code>);</code>

<code>//設定時間持續時間為 2000毫秒</code>

   D.RotateAnimation

     ① RotateAnimation類對象定義

       ② RotateAnimation類對象構造

<code>RotateAnimation(float fromDegrees, float toDegrees,</code>

<code>//第一個參數fromDegrees為動畫起始時的旋轉角度</code>

<code>//第二個參數toDegrees為動畫旋轉到的角度</code>

<code>//第三個參數pivotXType為動畫在X軸相對于物件位置類型</code>

<code>//第四個參數pivotXValue為動畫相對于物件的X坐标的開始位置</code>

<code>//第五個參數pivotXType為動畫在Y軸相對于物件位置類型</code>

<code>//第六個參數pivotYValue為動畫相對于物件的Y坐标的開始位置</code>

<code>myAnimation_Rotate=</code><code>new</code> <code>RotateAnimation(</code><code>0</code><code>.0f, +</code><code>350</code><code>.0f,</code>

<code>Animation.RELATIVE_TO_SELF,</code><code>0</code><code>.5f,Animation.RELATIVE_TO_SELF, </code><code>0</code><code>.5f);</code>

<code>myAnimation_Rotate.setDuration(</code><code>3000</code><code>);</code>

<code>//設定時間持續時間為 3000毫秒</code>

如何使用Java代碼中的動畫效果

   使用從View父類繼承過來的方法startAnimation()來為View或是子類View等等添加一個動畫效果

<code>public</code> <code>void</code> <code>startAnimation (Animation animation)</code>

   恩恩!差不多完了,這樣看着爽多了哈~

     本文轉自zhf651555765 51CTO部落格,原文連結:http://blog.51cto.com/smallwoniu/1249022,如需轉載請自行聯系原作者

繼續閱讀