Android動畫系列之幀動畫和補間動畫
阿新 • • 發佈:2020-09-25
> 原文首發於微信公眾號: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,在該檔案中定義位移動畫如下: