Android 動畫系列之逐幀(Frame)動畫詳解

前言

前段時間太忙了,已經好久沒發博客了,好多想寫的東西都沒時間寫,想了想,這個星期就抽時間寫一個動畫合集吧,把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() 是否正在運行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章