Android 動畫總結(jié)(1) - 概述
Android 動畫總結(jié)(3) - 補間動畫
Android 動畫總結(jié)(4) - 插值器
Android 動畫總結(jié)(5) - 屬性動畫
Android 動畫總結(jié)(6) - 估值器
Android 動畫總結(jié)(7) - ViewGroup 子元素間的動畫
Android 動畫總結(jié)(8) - Activity 轉(zhuǎn)場動畫
Android 動畫總結(jié)(9) - 過渡動畫
Frame Animation秧了,也叫 Drawable Animation,原理就類似視頻快速播放一幀一幀的圖片口糕。一般場景下很少使用放闺,工作中遇到的是有時會有背景色空郊,用若干顏色值變化,有時一個 View 要彈跳,其實是做好了若干切圖,圖片大小一致接箫,但里面的內(nèi)容處于不同位置攒读,然后播放起來看著好像是在彈跳。
如果真的有用大圖辛友,需要防止 OOM 問題薄扁。
xml 方式
在 res/anim
目錄創(chuàng)建動畫 xml 文件。其中一個 <item>
代表一幀废累。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@color/color1"
android:duration="200" />
<item
android:drawable="@color/color2"
android:duration="200" />
<item
android:drawable="@color/color3"
android:duration="200" />
<item
android:drawable="@color/color4"
android:duration="200" />
<item
android:drawable="@color/color5"
android:duration="200" />
<item
android:drawable="@color/color6"
android:duration="200" />
<item
android:drawable="@color/color7"
android:duration="200" />
<item
android:drawable="@color/color8"
android:duration="200" />
<item
android:drawable="@color/color9"
android:duration="200" />
<item
android:drawable="@color/color10"
android:duration="200" />
<item
android:drawable="@color/color11"
android:duration="200" />
<item
android:drawable="@color/color12"
android:duration="200" />
</animation-list>
如果是顏色值邓梅,要在 colors.xml
中定義好,直接在 android:drawable
處使用 #FFFFFF
這種十六進制顏色值會報錯邑滨。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="color1">#FF3030</color>
<color name="color2">#FF4500</color>
<color name="color3">#FF6EB4</color>
<color name="color4">#FF7F50</color>
<color name="color5">#FF8C00</color>
<color name="color6">#FFA54F</color>
<color name="color7">#FFB90F</color>
<color name="color8">#FFC1C1</color>
<color name="color9">#FFDEAD</color>
<color name="color10">#FFE4E1</color>
<color name="color11">#FFEFD5</color>
<color name="color12">#FFF68F</color>
</resources>
其中 android:oneshot
用于控制動畫是否循環(huán)播放日缨,為 true 只播放一次并停留在最后一幀,默認是 false掖看,循環(huán)播放的匣距。
然后代碼控制播放,實際運行發(fā)現(xiàn)既可以作為 Background 也可以作為 Resource哎壳,都可以啟動動畫毅待。
// 作為 Background
image.backgroundResource = R.drawable.test // 設(shè)置背景資源
// or
// image.backgroundDrawable = resources.getDrawable(R.drawable.frame_drawable_test)
// getBackground() 取得 AnimationDrawable 對象
val animDrawable : AnimationDrawable = image.background as AnimationDrawable
// 啟動動畫
animDrawable.start()
// 作為 Resource
image.imageResource = R.drawable.frame_drawable_test
// getDrawable() 取得 AnimationDrawable 對象
val animDrawable2 : AnimationDrawable = image.drawable as AnimationDrawable
animDrawable.stop() // 停止動畫
animDrawable2.start()
代碼方式
val animDrawable = AnimationDrawable()
animDrawable.isOneShot = true
(1..12).map {
val id = resources.getIdentifier("color" + it, "color", packageName)
animDrawable.addFrame(resources.getDrawable(id), 200) // 添加一幀,播放時長 200 ms
}
// 作為 Resource
image.setImageDrawable(animDrawable)
// 作為 Background
// image.backgroundDrawable = animDrawable
// image.background = animDrawable
animDrawable.start()
效果如下: