前言
前段時間太忙了,已經好久沒發博客了,好多想寫的東西都沒時間寫,想了想,這個星期就抽時間寫一個動畫合集吧,把Android中用到的動畫做一個大合集。
這一篇就先寫Android中最簡單也最容易理解的動畫:逐幀(Frame)動畫吧。逐幀動畫是通過一張一張的圖片,切換形成的動畫,就類似與我們看的膠片電影一樣,逐幀動畫最簡單的使用就是在xml文件中定義要播放的圖片文件並設置好時長,然後在代碼中獲取並播放。下面以一個播放語音的動畫小例子來演示一下具體使用。
使用
定義XML文件
在res/drawable/目錄下新建一個動畫文件,根節點選擇animation-list
。這裏可能有人很好奇,爲什麼動畫文件不是在anim目錄下而是在drawable目錄下呢?其實逐幀動畫對應的類是:AnimationDrawable其父類就是一個Drawable對象。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item
android:drawable="@drawable/ic_sound1"
android:duration="300" />
<item
android:drawable="@drawable/ic_sound2"
android:duration="300" />
<item
android:drawable="@drawable/ic_sound3"
android:duration="300" />
</animation-list>
其中drawable屬性就是對應的圖片資源,建議將圖片放在drawable目錄下,以免出現錯誤。
oneshot
:true 播放一次 false 循環播放
代碼中啓動動畫
mSoundView.setImageDrawable(getResources().getDrawable(R.drawable.frame));
mAnim = (AnimationDrawable) mSoundView.getDrawable();
mAnim.start();
我們也可以直接給ImageView設置動畫文件爲背景,然後直接獲取AnimationDrawable再start就可以了。
運行結果:
除了用上面的在xml中定義幀動畫文件外,我們也可以通過AnimationDrawable對象的addFrame()方法在代碼中添加。
另外,AnimationDrawable還有如下方法:
JAVA方法 | 解釋 |
---|---|
addFrame(Drawable frame, int duration) | 添加一個幀動畫 |
getDuration(int i) | 獲取角標對應持續時間 |
getFrame(int index) | 獲取角標對應幀動畫 |
getNumberOfFrames() | 獲取幀的動畫數(放三張圖片返回就是3) |
isOneShot() | 是否只播放一次 |
setOneShot(boolean oneShot) | 設置是否只播放一次 |
isRunning() | 是否正在運行 |