1. 程式人生 > >Android動畫系列之幀動畫和補間動畫

Android動畫系列之幀動畫和補間動畫

> 原文首發於微信公眾號:jzman-blog,歡迎關注交流! Android 提供三種動畫:幀動畫、補間動畫和屬性動畫,本篇文章介紹幀動畫以及補間動畫的使用,屬性動畫的使用將在後面的文章中分享,那就來複習一下這兩種動畫的使用吧。 #### FrameAnimation FrameAnimation 即逐幀動畫,通俗來說就是按照圖片動作順序依次播放來形成動畫,建立 FrameAnimation 可用 xml 定義也可直接使用程式碼建立。 ##### xml建立幀動畫 在 res/drawable 資料夾下建立一個 drawable 檔案,使用 animation-list 標籤,具體內容如下: ```xml ``` 屬性 oneshot 為 true 表示動畫只能播放一次,false 表示動畫迴圈播放,drawable 是當前動作對應的圖片,duration 是其持續時間,duration 長度影響動畫播放的快慢,然後在 Activity 中使用獲取該 drawable 檔案對應的 AnimationDrawable,然後使用 AnimationDrawable 物件來控制動畫的狀態,參考如下: ```java //獲取Frame動畫檔案對應的AnimationDrawable mAnimationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.frame_animator); //設定AnimationDrawable為圖片的背景 imageView.setBackground(mAnimationDrawable); //開啟動畫 mAnimationDrawable.start(); //停止動畫 mAnimationDrawable.stop(); ``` ##### 程式碼建立幀動畫 使用程式碼建立幀動畫就是建立 AnimationDrawable 物件,然後在 AnimationDrawable 中新增對應的 Frame 即可,程式碼參考如下: ```java //程式碼建立Frame動畫 mAnimationDrawable = new AnimationDrawable(); //設定動畫迴圈播放,true為動畫只播放一次 mAnimationDrawable.setOneShot(false); mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.zzlx1),100); mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.zzlx2),100); mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.zzlx3),100); //... imageView.setBackground(mAnimationDrawable); //開啟動畫 mAnimationDrawable.start(); //停止動畫 mAnimationDrawable.stop(); ``` FrameAnimation 效果如下: ![幀動畫](https://user-gold-cdn.xitu.io/2019/9/19/16d4521bc9fcd6e8?w=302&h=411&f=gif&s=112561) #### TweenAnimation TweenAnimation 即常說的補間動畫,主要有以下幾種: 1. 位移動畫(Translation) 2. 縮放動畫(Scale) 3. 旋轉動畫(Rotate) 4. 透明度動畫(Alpha) 5. 組合動畫 上述動畫都有自己特有的一下屬性,下面來看一看這些動畫通用的一些屬性,具體如下: ```xml android:duration="1200" android:startOffset ="1000" android:fillBefore = "true" android:fillAfter = "false" android:fillEnabled= "true" android:repeatMode = "restart" android:repeatCount = "0" android:interpolator = "@android:anim/accelerate_interpolator" ``` 如果在程式碼中進行對應動畫實現,這些屬性也有對應的屬性設定,直接設定即可。 ##### 位移動畫(Translate) 位移動畫對 View 進行水平方向或垂直方向位置的平移,可指定起始位置和結束位置,可使用 xml 定義位移動畫也可以使用程式碼建立位移動畫,位移動畫對應的 Animation 的子類是 TranslateAnimation。 **xml定義位移動畫**:在 res/anim 下建立一個xml檔案 translation_anim.xml,在該檔案中定義位移動畫如下: